QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#863351#9750. 拼图qmqcbhcTL 0ms0kbC++264.3kb2025-01-19 16:09:372025-01-19 16:09:37

Judging History

你现在查看的是最新测评结果

  • [2025-01-19 16:09:37]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2025-01-19 16:09:37]
  • 提交

answer

#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include <unordered_map>
#define ll          int
#define endl "\n"

using namespace std;

struct s {
	string name;
	ll a;
	ll z1 = 0;//综测
	ll z2 = 0;
	ll b;
	ll sum = 0;
} p[25000];

bool cmp1(s x, s y) {
	if (x.z1 != y.z1)
		return x.z1 > y.z1;
	else if (x.a != y.a)
		return x.a > y.a;
	else return x.name < y.name;
}

bool cmp2(s x, s y) {
	if (x.z2 != y.z2)
		return x.z2 > y.z2;
	else if (x.b != y.b)
		return x.b > y.b;
	else return x.name < y.name;
}

bool cmpz2(s x, s y) {
	return x.b > y.b;
}

bool cmpz1(s x, s y) {
	return x.a > y.a;
}

bool cp(s x, s y) {
	if (x.sum != y.sum)
		return x.sum > y.sum;
	else if (x.z1 + x.z2 != y.z1 + y.z2)
		return x.z1 + x.z2 > y.z1 + y.z2;
	else if (x.a + x.b != y.a + y.b)
		return x.a + x.b > y.b + y.a;
	else return x.name < y.name;
}

inline int read() {
	int x = 0, f = 0;
	char c = getchar();
	while (c > 57 || c < 48) {
		f |= c == 45;
		c = getchar();
	}
	while (c <= 57 && c >= 48) {
		x = (x << 3) + (x << 1) + c - 48;
		c = getchar();
	}
	return f ? -x : x;
}

int main() {
	// fio();
	ll t;
	t = 1;
	while (t--) {
		ll n;
		n = read();
		ll l1 = (ll)(double(n) * 0.15);
		ll l2 = (ll)(double(n) * 0.25);
		ll l3 = (ll)(double(n) * 0.35);
		ll u1;
		ll u2;
		ll u3;
		ll d1, d2;
		ll u4;
		for (ll i = 1; i <= n; i++) { //智,德,体
			string f;
			cin >> f;
			p[i].name = f;
			ll x;
			for (ll j = 1; j <= 3; j++) {
				x = read();
				if(j==1) p[i].a = x;
				p[i].z1 += x;
			}
			for (ll j = 1; j <= 3; j++) {
				x = read();
				if(j==1) p[i].b = x;
				p[i].z2 += x;
			}
			if (p[i].name == "crazyzhk")
				u1 = 100 - p[i].a, u2 = 100 - p[i].b, u3 = p[i].a, u4 = p[i].b, d1 = p[i].z1, d2 = p[i].z2;
		}
		ll f, q, m;
		m = read();
		f = read();
		q = read();
		ll ans = 4e8;
		vector<ll>g;
//		ll of = 0;
		for (ll i = 0; i <= u1; i++) {
			for (ll j = 0; j <= u2; j++) {
//				if (i == u1 && j == u2) {
//					of = 1;
//				}
				g.clear();
				map<ll, ll>e;
				ll cnt = f * i + q * j;
				for (ll z = 1; z <= n; z++) {
					if (p[z].name == "crazyzhk") {
						p[z].z1 = d1 + i;
						p[z].z2 = d2 + j;
						p[z].a = u3 + i, p[z].b = u4 + j;
						break;
					}
				}
				//15 10 5
				//  sort(p+1,p+1+n,cmp1);
				for (ll z = 1; z <= n; z++) {
					p[z].sum = 0;
				}
				sort(p + 1, p + 1 + n, cmpz1);
				for (ll z = 1; z <= n; z++) {
					e[p[z].a]++;
					g.push_back(p[z].a);
				}
				ll r1 = (ll)((double)g.size() * 0.25);
				ll r2 = (ll)((double)g.size() * 0.45);
				ll r3 = (ll)((double)g.size() * 0.75);
				ll cn1 = l1, cn2 = l2, cn3 = l3;
				ll cs = 0;
				ll k1, k2, k3;
				for (auto j : g) {
					cs++;
					if (cs <= r1) {
						k1 = j;
					} else if (cs <= r2) {
						k2 = j;
					} else if (cs <= r3) {
						k3 = j;
					}
				}
				sort(p + 1, p + 1 + n, cmp1);
				for (ll z = 1; z <= n; z++) {
					if (p[z].a >= k1 && cn1 > 0) {
						cn1--;
						p[z].sum += 15;
					} else if (p[z].a >= k2 && cn2 > 0) {
						cn2--;
						p[z].sum += 10;
					} else if (p[z].a >= k3 && cn3 > 0) {
						cn3--;
						p[z].sum += 5;
					}
				}
				/////////////////////////////////
				g.clear();
				e.clear();
				sort(p + 1, p + 1 + n, cmpz2);
				for (ll z = 1; z <= n; z++) {
					e[p[z].b]++;

					g.push_back(p[z].b);
				}
				r1 = (ll)((double)g.size() * 0.25);
				r2 = (ll)((double)g.size() * 0.45);
				r3 = (ll)((double)g.size() * 0.75);
				cn1 = l1, cn2 = l2, cn3 = l3;
				cs = 0;
				for (auto j : g) {
					cs++;
					if (cs <= r1) {
						k1 = j;
					} else if (cs <= r2) {
						k2 = j;
					} else if (cs <= r3) {
						k3 = j;
					}
				}
				sort(p + 1, p + 1 + n, cmp2);
				for (ll z = 1; z <= n; z++) {
					if (p[z].b >= k1 && cn1 > 0) {
						cn1--;
						p[z].sum += 15;
					} else if (p[z].b >= k2 && cn2 > 0) {
						cn2--;
						p[z].sum += 10;
					} else if (p[z].b >= k3 && cn3 > 0) {
						cn3--;
						p[z].sum += 5;
					}
				}
				sort(p + 1, p + 1 + n, cp);
				cs = 0;
				for (ll z = 1; z <= n; z++) {
					cs++;
					if (p[z].name == "crazyzhk" && cs <= m) {
						ans = min(ans, cnt);
					}
				}

			}
		}
		if (ans == 4e8)
			cout << "Surely next time" << endl;
		else cout << ans << endl;
	}
}

詳細信息

Test #1:

score: 0
Time Limit Exceeded

input:

2
4 0 0 0
4 4 4 4

output:


result: