简单题,却犯了两个错误导致WA了多次。
第一是程序容错性不好,没有考虑到输入数据中可能给实际已经罚下场的人再来牌,这种情况在system测试数据里是有的。。。
二是chronologically这个词没注意,其实如果输入是按时间顺序的,就直接在线处理就行了,用不着int team1[110][110],team2[110][110]两个数组。
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<map> #include<set> #include<vector> #include<algorithm> #include<stack> #include<queue> #include<cctype> #include<sstream> using namespace std; #define pii pair<int,int> #define LL long long int const int eps=1e-8; const int INF=1000000000; const int maxn=90+10; char t1[25],t2[25]; int n,t,m; int team1[110][110],team2[110][110]; int r1[110],r2[110]; char team,card; int main() { //freopen("in2.txt","r",stdin); //freopen("out.txt","w",stdout); scanf("%s%s",t1,t2); scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&t); getchar(); scanf("%c",&team); getchar(); scanf("%d",&m); getchar(); scanf("%c",&card); getchar(); if(team=='a') { if(card=='y') { r2[m]++; if(r2[m]==2) team2[t][m]=2; } else { if(r2[m]<2) { r2[m]=2; team2[t][m]=2; } } } else { if(card=='y') { r1[m]++; if(r1[m]==2) team1[t][m]=2; } else { if(r1[m]<2) { r1[m]=2; team1[t][m]=2; } } } } for(int i=1; i<=90; i++) { for(int j=1; j<=99; j++) { if(team1[i][j]==2) { printf("%s %d %d\n",t1,j,i); break; } else if(team2[i][j]==2) { printf("%s %d %d\n",t2,j,i); break; } } } //fclose(stdin); //fclose(stdout); return 0; }