Problem G Galactic Collegiate Programming Contest
这个题题意读了一会,就是几个队参加比赛,根据实时的信息,问你1号队的实时排名(题数和罚时相同的时候并列)。
暴力模拟,简直要模拟死了。。。有个地方感觉很有意思,就是如果某个队还一道题都没写出来的话根本就不用和1队比较,这里用一个数组存一下出题数大于等于1的队伍,直接比较这些队伍就可以,如果全都比较一遍就会超时,真的,相信我。
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cstdlib> 6 #include<string.h> 7 #include<set> 8 #include<vector> 9 #include<queue> 10 #include<stack> 11 #include<map> 12 #include<cmath> 13 using namespace std; 14 typedef long long ll; 15 const int INF=0x3f3f3f3f; 16 double PI=acos(-1.0); 17 const int maxn=1e5+100; 18 int s[maxn],t[maxn],num[maxn],flag[maxn]; 19 int main(){ 20 int m,n,a,b,h,ans; 21 while(~scanf("%d%d",&m,&n)){ 22 memset(flag,0,sizeof(flag)); 23 memset(s,0,sizeof(s)); 24 memset(t,0,sizeof(t)); 25 memset(num,0,sizeof(num)); 26 h=0,ans=0; 27 for(int i=0;i<n;i++){ 28 scanf("%d%d",&a,&b); 29 num[a]++; 30 t[a]+=b; 31 if(num[a]==1)s[h++]=a; 32 if(a==1){ 33 for(int j=0;j<h;j++){ 34 int cnt=s[j]; 35 if(cnt==1)continue; 36 if(num[cnt]+1==num[1]&&(t[cnt]<(t[1]-b))){ 37 ans--; 38 flag[cnt]=0; 39 } 40 else if(num[cnt]==num[1]&&t[cnt]>=t[1]){ 41 ans--; 42 flag[cnt]=0; 43 } 44 } 45 } 46 else{ 47 if(num[a]==num[1]+1&&!flag[a]){ 48 ans++;flag[a]=1; 49 } 50 if(num[a]==num[1]&&t[a]<t[1]&&!flag[a]){ 51 ans++;flag[a]=1; 52 } 53 } 54 printf("%d\n",ans+1); 55 } 56 } 57 return 0; 58 }