The 2024 ICPC Asia East Continent Online Contest (I) - 比赛主页 - 比赛 - QOJ.ac
首先考虑进 16 强的,一定得至少比两个队伍强,所以他的排名需要 >= 3
考虑进 8 强的,因为进8强,一定是进16强的第一队伍和第二队伍比赛
那如果是第一队伍赢了,那就是原来得第二的队伍的这个人加上原来他赢得两个人 1 + 2,再加上第一队伍第一轮赢得 3 个人 1 + 2 + 3,再加上自身 1 + 2 + 3 + 1.就是排名 >= 7
如果是第二队伍赢了,得第二的队伍原来就比两个队伍强,然后加上他赢得得第一的,得第一的又比原来 3 个队伍厉害,就是 2 + 1 + 3 ,再加上自身,依旧是 7 个。
进 4 强的,首先是进 8 强的每一个队伍都是保底比 6 个队伍强的,然后自身又比 6 个队伍强,再加上赢得这一场,就是 6 + 6 + 1, 再加上自己 14
进2 强的,依旧同理 13 + 13 + 1 + 1= 28
冠军的就是 32了。
const int N = 50;
struct node
{
int id, num;
} a[N];
bool cmp(node a, node b)
{
return a.num < b.num;
}
void solve()
{
for (int i = 1; i <= 32; i ++)
{
cin >> a[i].num;
a[i].id = i;
}
sort(a + 1, a + 1 + 32, cmp);
// for (int i = 1; i <= 32; i ++) cout << a[i].num << " ";
// cout << "\n";
int u = 0;
// u 排第几
for (int i = 1; i <= 32; i ++)
if (a[i].id == 1) u = i;
if (u >= 32) cout << 1 << "\n";
else if (u >= 28) cout << 2 << "\n";
else if (u >= 14) cout << 4 << "\n";
else if (u >= 7) cout << 8 << "\n";
else if (u >= 3) cout << 16 << "\n";
else cout << 32 << "\n";
}
Find the Easiest Problem - 题目 - QOJ.ac
这个题目用vector 进行储存一下,然后去重一下,找一下解决的最大题目数就行了。
void solve()
{
int n; cin >> n;
vector<string> a[33];
for (int i = 1; i <= n; i ++)
{
string team, ac;
char id;
cin >> team >> id >> ac;
if (ac == "accepted")
a[id - 'A'].push_back(team);
}
char ans = '0';
int mmax = 0;
for (int i = 0; i < 32; i ++)
{
sort(a[i].begin(), a[i].end());
a[i].erase(unique(a[i].begin(), a[i].end()), a[i].end());
if (mmax < a[i].size())
{
mmax = a[i].size();
ans = char('A' + i);
}
}
cout << ans << "\n";
}