题目
题解
首先输入并处理,用一个结构体将每个人的信息存好,然后把阳光跑步的信息按人分类,每个人单独处理,具体细节见注释。
#include <bits/stdc++.h>
//#define int long long
using namespace std;
const int M = 5e3 + 5, N = 1e4 + 5;
int n, m;
int tianshu[100] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
map<string, int> mp;
struct _node {
//阳光长跑
int year, mon, day;
int khh, kmm, kss;
int jhh, jmm, jss; //开始结束时间
double L; //距离
int zfen, zmiao; //暂停时间
int bs; //步数
};
struct node {
string s;
int k; //编号
char xing[100]; //性别
int zx; //体育课专项成绩
int fen, miao; //期末长跑测试成绩
char flag[100]; //体质测试结果
int dyc; //大一专项期末
int cs; //班级训练营次数
vector<_node> b;
int tot; //条数
int pp; //合法次数
};
node a[M];
bool cmp(_node l, _node r) {
if (l.year == r.year) {
if (l.mon == r.mon) {
if (l.day == r.day) {
if (l.khh == r.khh) {
if (l.kmm == r.kmm) {
return l.kss < r.kss;
} else {
return l.kmm < r.kmm;
}
} else {
return l.khh < r.khh;
}
} else {
return l.day < r.day;
}
} else {
return l.mon < r.mon;
}
} else {
return l.year < r.year;
}
}
int p1(int x) {
//体育课专项成绩
return a[x].zx;
}
int p2(int x) {
//长跑测试成绩
if (a[x].xing[0] == 'M') {
int ff = a[x].fen, mm = a[x].miao;
if (ff < 12 || (ff == 12 && mm <= 30)) {
return 20;
}
if (ff < 13 || (ff == 13 && mm <= 0)) {
return 18;
}
if (ff < 13 || (ff == 13 && mm <= 30)) {
return 16;
}
if (ff < 14 || (ff == 14 && mm <= 0)) {
return 14;
}
if (ff < 14 || (ff == 14 && mm <= 30)) {
return 12;
}
if (ff < 15 || (ff == 15 && mm <= 10)) {
return 10;
}
if (ff < 15 || (ff == 15 && mm <= 50)) {
return 8;
}
if (ff < 16 || (ff == 16 && mm <= 30)) {
return 6;
}
if (ff <