1. 程式人生 > 其它 >第十屆藍橋杯省賽C++A/C組 外賣店優先順序 籃球杯,奇奇怪怪の模擬

第十屆藍橋杯省賽C++A/C組 外賣店優先順序 籃球杯,奇奇怪怪の模擬

真的很奇怪,考場上應該很難想到吧,不過一想到暴力mle還能90分我就...

#include<bits/stdc++.h>
#define rep(i,x,n) for(int i=x;i<=n;i++)
using namespace std;

const int N = 1e5+10;

int n,m,t;
int a[N];
int pre[N];
int st[N];
struct node{
	int t,id;
}q[N];

bool cmp(node a,node b) {
	if(a.t==b.t) return a.id<b.id;
	else return a.t<b.t;
}//按時間順序排列 

main()
{
	cin >> n >> m >> t;
	rep(i,1,m) cin >> q[i].t >> q[i].id;
	
	sort(q+1,q+m+1,cmp);
	
	int i=1;
	while(i<=m)
	{
		int j=i;
		while(j<=m&&q[i].id==q[j].id&&q[i].t==q[j].t) j++;
		int cnt=j-i;//同一家店鋪訂單的個數
		int cur=q[i].t,id=q[i].id;
		i=j;
		a[id]-=cur-pre[id]-1;//算了減少的數量
		pre[id]=cur;
		if(a[id]<0) a[id]=0;
		if(a[id]<=3) st[id]=0;
		a[id]+=cnt*2;
		if(a[id]>5) st[id]=1;
	}
	int ans=0;
	rep(id,1,n)
	{
		if(pre[id]!=t) a[id]-=t-pre[id];
		if(a[id]<=0) a[id]=0;
		if(a[id]<=3) st[id]=0;
		ans+=st[id];
	}
	cout << ans;
}