ZOJ - 3705 Applications 【模拟】

mac2022-06-30  24

题目链接

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3705

题意

给出N个队员 然后一个教练要从中选择 M名队员 要选最优的M名

然后根据这么来判断

IF做过的题目是属于 MaoMao Selection 那么 pts + 2.5 else IF属于 Old Surgeon Contest pts + 1.5 else IF 题目序号是素数 pts + 1 else pts + 0.3

IF 参赛的队伍获得一等奖 pts + 36 else IF 获得二等奖 pts + 27 else IF 获得三等奖 pts + 18 else pts + 0

参加 JapanJam 类的比赛 (计算rating)

用第三高的 rating 作为 r

Pts = max(0, (r - 1200) / 100) * 1.5

计算这个式子 算得 要加的 pts

最后 如果这名队员是女生 pts + 33

输入: 先输入T 表示 T组数据 输入 N M 表示 N名队员 选 M个 输入 R 再有R个题目 序号 表示 这R个题目是 MaoMao Selection 输入 S 再有S个题目序号 表示 这 S个题目是 Old Surgeon Contest 输入 Q 接下来 Q 行 每行三个参数 string int 分别代表 队伍名称 获得的奖项序号

接下来 N 行 参数 string string char int int 表示 队员名称 所属的队伍名称 性别 所做的题目数量 和 参加的 japan 比赛次数 然后会列出 题目序号 以及 每次参加 japan 所获得的 rating

思路

大概 题意讲清,,就能 A了吧

对了 如果 rating 个数 不足三个 那么 pts + 0

AC代码

#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<vector> #include<map> #include<set> #include<string> #include<list> #include<stack> #include <queue> #define CLR(a, b) memset(a, (b), sizeof(a)) using namespace std; typedef long long ll; typedef pair <int, int> pii; const int INF = 0x3f3f3f3f; const int maxn = 1e2 + 5; const int MOD = 1e9; bool isprime(int x) { int m = sqrt(x) + 1; for (int i = 2; i <= m; i++) if (x % i == 0) return false; return true; } struct node { string name; double score; }; bool comp(int x, int y) { return x > y; } bool cmp(node x, node y) { if (x.name == y.name) return x.name < y.name; return x.score > y.score; } int main() { int t; cin >> t; while (t--) { map <int, int> mao, old; int n, m; scanf("%d%d", &n, &m); int k; scanf("%d", &k); int num; for (int i = 0; i < k; i++) { scanf("%d", &num); mao[num] = 1; } scanf("%d", &k); for (int i = 0; i < k; i++) { scanf("%d", &num); old[num] = 1; } map <string, int> prize; scanf("%d", &k); string s; for (int i = 0; i < k; i++) { cin >> s; scanf("%d", &num); if (num == 1) prize[s] = 36; else if (num == 2) prize[s] = 27; else if (num == 3) prize[s] = 18; else if (num == 0) prize[s] = 0; } vector <node> ans; char c; for (int i = 0; i < n; i++) { node u; u.score = 0.0; cin >> u.name; cin >> s; u.score += prize[s]; scanf(" %c", &c); if (c == 'F') u.score += 33; int v, w; scanf("%d%d", &v, &w); for (int i = 0; i < v; i++) { scanf("%d", &num); if (mao[num]) u.score += 2.5; else if (old[num]) u.score += 1.5; else if (isprime(num)) u.score += 1; else u.score += 0.3; } vector <int> rat; for (int i = 0; i < w; i++) { scanf("%d", &num); rat.push_back(num); } if (rat.size() >= 3 ) { sort(rat.begin(), rat.end(), comp); u.score += (0, (rat[2] - 1200) * 1.0 / 100) * 1.5; } ans.push_back(u); } sort(ans.begin(), ans.end(), cmp); for (int i = 0; i < m; i++) { cout << ans[i].name; printf(" %.3lf\n", ans[i].score); } } }

转载于:https://www.cnblogs.com/Dup4/p/9433103.html

最新回复(0)