3757一个模拟题,简单,但容易错;
3758 大素数判定就行;
#include<cstdio> #include<cstring> #include<algorithm> #define maxn 100009 using namespace std; int ans[3]; int hit[maxn]; int in[maxn]; int ball[maxn]; bool vis[maxn]; int main() { int n,m; int p,q; while(scanf("%d%d",&n,&m)!=EOF) { ans[0]=0; ans[1]=0; memset(vis,0,sizeof vis); for(int i=0; i<n; i++) scanf("%d",&ball[i]); sort(ball,ball+n); int ma1=-1; int sumofin=0; int tar=0; int turn=0; for(int i=0; i<m; i++) { bool flag1=0,flag2=0,flag3=0; for(tar; tar<n; tar++) if(vis[ball[tar]]==0) break; ma1=0; sumofin=0; scanf("%d",&p); for(int i=0; i<p; i++) { scanf("%d",&hit[i]); if(hit[i]>ma1)ma1=hit[i]; if(hit[i]==ball[tar]&&p==1) flag1=1;//只击中目标球; } scanf("%d",&q); for(int i=0; i<q; i++) { scanf("%d",&in[i]); sumofin+=in[i]; vis[in[i]]=1; if(in[i]==ball[tar])flag2=1;//目标球进了; if(in[i]==0)flag3=1;//白球进了; } if(p==0) { turn=1-turn; ans[turn]+=ball[tar]; } else { if(flag3==0&&flag1==0) { turn=1-turn; ans[turn]+=ma1; ans[turn]+=sumofin; } else if(flag3&&p) { turn=1-turn; ans[turn]+=ma1; ans[turn]+=sumofin; } else if(flag2==0) { turn=1-turn; ans[turn]+=sumofin; } else { ans[turn]+=sumofin; } } } printf("%d : %d ",ans[0],ans[1]); } return 0; }