icpc:problems:usaco21open_acowdemia_ii_b
目录
problems | |
---|---|
名称 | Acowdemia II B |
题目编号 | USACO21OPEN_B2 |
题目链接 | usaco.org/… |
来源 | USACO |
算法分类 | 模拟 |
难易程度 | 容易 |
Acowdemia II B
想法
难点在理解题目大意上,题目重点在论文作者顺序中如果出现字典序升序,则有可能出现相同贡献;当出现降序,则在一篇论文中就可以判断出资历,降序后的人资历老与降序前的人。故对题意进行模拟即可。
代码实现
#include<iostream> #include<algorithm> #include<cstring> #include<string> using namespace std; const int N = 110; string name[N]; int line[N], ans[N][N]; int main() { int n, k; cin >> k >> n; for (int i = 1; i <= n; ++i) { cin >> name[i]; } string temp; memset(ans, -1, sizeof(ans)); for (int i = 1; i <= k; ++i) { for (int j = 1; j <= n; ++j) { cin >> temp; for (int t = 1; t <= n; ++t) if(temp == name[t]) { line[j] = t; break; } } for (int j = 1; j <= n; ++j) { bool up = false; for (int t = j - 1; t >= 1; --t) { if(name[line[t]] > name[line[t+1]]) up = true; if(up) { ans[line[j]][line[t]] = 1; ans[line[t]][line[j]] = 0; } } } } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if(i == j) { cout << 'B'; continue; } if(ans[i][j]==-1) cout << '?'; else cout << ans[i][j]; } cout << endl; } return 0; }
/app/www/public/data/pages/icpc/problems/usaco21open_acowdemia_ii_b.txt · 最后更改: 2023/06/28 10:02 由 温婕莺