rt.
咕了三四个月了(),样例过了,但是 wa。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e6 + 100;
const int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
struct Node{
char c, q; // 性别 体质测试是否通过
string s, b; // 学号 期末长跑测试成绩
int x, y, f, k; // 体育课专项成绩 「大一专项计划」的期末检测成绩 参加「班级训练营」的次数
} a[MAXN];
int n, m, ps[MAXN], nowx, g; // 步数
string ss[MAXN], p[MAXN], sk[MAXN], sz[MAXN], zt[MAXN]; // 表示第 j 条记录的完成日期 学号 开始时间 结束时间 暂停时间
double l[MAXN];
map<string, int> mp, mp1; // 得分 阳光合法次数
map<string, char> mp2;//性别 map
int check(string s) {
int x = ((s[0] - '0') * 10 + s[1] - '0') * 3600;
int x1 = ((s[3] - '0') * 10 + s[4] - '0') * 60;
int x2 = ((s[6] - '0') * 10 + s[7] - '0');
return x + x1 + x2;
}
bool check1(string s) {
return ((s[0] - '0') * 10 + s[2] - '0' <= 34);
}
int check2(int x) {
if (x >= 3 && x <= 6) return 2;
if (x >= 7 && x <= 10) return 4;
if (x >= 11 && x <= 13) return 6;
if (x >= 14 && x <= 16) return 7;
if (x >= 17 && x <= 18) return 8;
if (x >= 19 && x <= 20) return 9;
if (x >= 21) return 10;
return 0;
}
int check3(int x) {
if (x >= 6 && x <= 8) return 1;
if (x >= 9 && x <= 11) return 2;
if (x >= 12 && x <= 14) return 3;
if (x >= 15 && x <= 17) return 4;
if (x >= 18) return 5;
return 0;
}
bool cmp(Node i, Node j) {
return mp[i.s] > mp[j.s];
}
string check4(int x) {
if (x >= 0 && x < 60) return "F";
if (x >= 60 && x < 63) return "D";
if (x >= 63 && x < 67) return "D+";
if (x >= 67 && x < 70) return "C-";
if (x >= 70 && x < 73) return "C";
if (x >= 73 && x < 77) return "C+";
if (x >= 77 && x < 80) return "B-";
if (x >= 80 && x < 85) return "B";
if (x >= 85 && x < 90) return "B+";
if (x >= 90 && x < 95) return "A-";
if (x >= 95 && x <= 100) return "A";
}
int check7(int x, int y, int z, int w) {
return x * 1000 + y * 100 + z * 10 + w;
}
int check5(string s) {
int x = check7(s[0] - '0', s[1] - '0', s[3] - '0', s[4] - '0');
if (x <= check7(1, 2, 3, 0)) return 20;
if (x <= check7(1, 3, 0, 0)) return 18;
if (x <= check7(1, 3, 3, 0)) return 16;
if (x <= check7(1, 4, 0, 0)) return 14;
if (x <= check7(1, 4, 3, 0)) return 12;
if (x <= check7(1, 5, 1, 0)) return 10;
if (x <= check7(1, 5, 5, 0)) return 8;
if (x <= check7(1, 6, 3, 0)) return 6;
if (x <= check7(1, 7, 0, 0)) return 4;
if (x <= check7(1, 8, 0, 0)) return 2;
return 0;
}
int check6(string s) {
int x = check7(s[0] - '0', s[1] - '0', s[3] - '0', s[4] - '0');
if (x <= check7(0, 6, 4, 0)) return 20;
if (x <= check7(0, 6, 5, 7)) return 18;
if (x <= check7(0, 7, 1, 4)) return 16;
if (x <= check7(0, 7, 3, 1)) return 14;
if (x <= check7(0, 7, 5, 0)) return 12;
if (x <= check7(0, 8, 0, 5)) return 10;
if (x <= check7(0, 8, 2, 0)) return 8;
if (x <= check7(0, 8, 3, 5)) return 6;
if (x <= check7(0, 8, 5, 0)) return 4;
if (x <= check7(0, 9, 0, 0)) return 2;
return 0;
}
signed main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i].s >> a[i].c >> a[i].x >> a[i].b >> a[i].q >> a[i].f >> a[i].k;
mp[a[i].s] += a[i].x + a[i].f;
mp2[a[i].s] = a[i].c;
}
cin >> m;
for (int i = 1; i <= m; i++) {
cin >> ss[i] >> p[i] >> sk[i] >> sz[i] >> l[i] >> zt[i] >> ps[i];
if (mp2[p[i]] == 'M' && ps[i] < 3000) {
continue;
}
if (mp2[p[i]] == 'F' && ps[i] < 1500) {
continue;
}
double pjsd = 1000.0 * l[i] / (check(sz[i]) - check(sk[i]));
if (pjsd >= 2 && pjsd <= 5) {
if (check1(zt[i])) {
double pjpf = 1000.0 * l[i] / ps[i];
if (pjpf <= 1.5) {
if ((ss[i][4] - '0') * 10 + ss[i][5] - '0' != (ss[g][4] - '0') * 10 + ss[g][5] - '0') {
int yy = (ss[g][4] - '0') * 10 + ss[g][5] - '0';
int xx = (ss[i][4] - '0') * 10 + ss[i][5] - '0';
if (days[yy] != (ss[g][6] - '0') * 10 + ss[g][7] - '0') {
continue;
}
if (ss[i][6] == '0' && ss[i][7] == '1') {
if (((sk[i][0] - '0') * 10 + sk[i][1]) - 1 >= ((sz[g][0] - '0') * 10 + sz[g][1])) {
mp1[p[i]]++;
g = i;
continue;
}
if (((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) < 24) {
mp1[p[i]]++;
g = i;
continue;
}
if ((((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) % 24) < ((sk[i][0] - '0') * 10 + sk[i][1] - '0')) {
mp1[p[i]]++;
g = i;
} else if ((((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) % 24 == (sk[i][0] - '0') * 10 + sk[i][1] - '0') && sz[g][3] == sk[i][3] && sz[g][4] == sk[i][4] && sz[g][6] == sk[g][6] && sz[g][7] == sk[g][7]) {
mp1[p[i]]++;
g = i;
}
}
}
if (ss[i] == ss[g]) { // 和上一个合法在同一天
if ((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6 < (sk[i][0] - '0') * 10 + sk[i][1] - '0') {
mp1[p[i]]++;
g = i;
} else if ((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6 == (sk[i][0] - '0') * 10 + sk[i][1] - '0' && sz[g][3] == sk[i][3] && sz[g][4] == sk[i][4] && sz[g][6] == sk[g][6] && sz[g][7] == sk[g][7]) {
mp1[p[i]]++;
g = i;
}
} else { // 例如: 11:20:30 4:00:00
if (((sk[i][0] - '0') * 10 + sk[i][1]) - 1 >= ((sz[g][0] - '0') * 10 + sz[g][1])) {
mp1[p[i]]++;
g = i;
continue;
}
if (((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) < 24) {
mp1[p[i]]++;
g = i;
continue;
}
if ((((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) % 24) < ((sk[i][0] - '0') * 10 + sk[i][1] - '0')) {
mp1[p[i]]++;
g = i;
} else if ((((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) % 24 == (sk[i][0] - '0') * 10 + sk[i][1] - '0') && sz[g][3] == sk[i][3] && sz[g][4] == sk[i][4] && sz[g][6] == sk[g][6] && sz[g][7] == sk[g][7]) {
mp1[p[i]]++;
g = i;
}
}
}
}
}
}
for (int i = 1; i <= n; i++) {
mp[a[i].s] += check2(mp1[a[i].s]);
}
for (int i = 1; i <= n; i++) {
if (a[i].q == 'P') {
mp[a[i].s] += 10; // 34 + 3 + 2 + 10 + 1 + 2 + 12
}
}
for (int i = 1; i <= n; i++) {
mp[a[i].s] += check3(mp1[a[i].s] + a[i].k);
if (mp2[a[i].s] == 'M') {
mp[a[i].s] += check5(a[i].b);
} else {
mp[a[i].s] += check6(a[i].b);
}
}
stable_sort(a + 1, a + n + 1, cmp);
for (int i = 1; i <= n; i++) {
cout << a[i].s << ' ' << mp[a[i].s] << ' ' << check4(mp[a[i].s]) << '\n';
}
return 0;
}