AcWing 1241. 外卖店优先级
原题链接
简单
作者:
因是因非
,
2022-02-24 21:29:18
,
所有人可见
,
阅读 154
#include <bits/stdc++.h>
#define t first
#define i second
using namespace std;
typedef pair<int, int> PII;
const int N = 1e6;
PII a[N];
struct Node
{
int last;
int v;
int flag;
}b[N];
int main()
{
int n, m, t;
cin >> n >> m >> t;
for(int i = 1; i <= m; i ++ )
scanf("%d%d", &a[i].t, &a[i].i);
sort(a + 1, a + m + 1);
for(int i = 1; i <= m; i ++ )
{
//cout << a[i].t << ' ' << b[a[i].i].last << endl;
if(b[a[i].i].last && b[a[i].i].last != a[i].t) b[a[i].i].v = max(b[a[i].i].v - (a[i].t - b[a[i].i].last) + 1, 0);
if(b[a[i].i].flag == 0 && b[a[i].i].v > 5) b[a[i].i].flag = 1;
if(b[a[i].i].flag == 1 && b[a[i].i].v <= 3) b[a[i].i].flag = 0;
b[a[i].i].last = a[i].t;
b[a[i].i].v += 2;
//cout << a[i].i << ' ' << b[a[i].i].v << endl;
if(b[a[i].i].flag == 0 && b[a[i].i].v > 5) b[a[i].i].flag = 1;
if(b[a[i].i].flag == 1 && b[a[i].i].v <= 3) b[a[i].i].flag = 0;
}
int ans = 0;
for(int i = 1; i <= n; i ++ )
{
if(b[i].last) b[i].v = max(0, b[i].v - t + b[i].last);
if(b[i].flag == 0 && b[i].v > 5) b[i].flag = 1;
if(b[i].flag == 1 && b[i].v <= 3) b[i].flag = 0;
//cout << b[i].v << endl;
if(b[i].flag) ans ++ ;
}
cout << ans;
}