2019省赛A组第7题 外卖店优先级
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef struct Node {
int t, id;
}node;
bool cmp(node a,node b) {
if (a.id == b.id)
return a.t < b.t;
return a.id < b.id;
}
bool flag[100010] = {
0};
int score[100010] = {
0 }, vis[100010] = {
0 };
int main() {
int n, m, T;
cin >> n >> m >> T;
node* p;
p = (node*)malloc(sizeof(node)*m);
for (int i = 0; i < m; i++) {
cin >> p[i].t >> p[i].id;
}
sort(p, p + m, cmp);
//memset(flag, 0, sizeof(flag));
int i = 0;
while (i<m) {
int t, id;
t = p[i].t, id = p[i].id;
if (t != vis[id] && vis[id] != 0)
{
score[id] -= t - vis[id] - 1;
}
if (score[id] < 0)//注意点
score[id] = 0;
if (flag[id] && score[id] <= 3) {
flag[id] = 0;
}
score[id] += 2;//判断完才能加
if (score[id] > 5)
flag[id] = 1;
vis[id] = t;
i++;
}
for (int i = 1; i <= n; i++) {
if (vis[i] < T) {
score[i] -= T - vis[i];
if (flag[i] && score[i] <= 3) {
flag[i] = 0;
}
}
}
int ans = 0;
for (int i = 1; i <= n; i++) {
if (flag[i])
ans++;
}
cout << ans;
return 0;
}
罗老师代码参考链接https://blog.csdn.net/weixin_43914593/article/details/112979653