QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#863351 | #9750. 拼图 | qmqcbhc | TL | 0ms | 0kb | C++26 | 4.3kb | 2025-01-19 16:09:37 | 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