ZOJ 3757 Alice and Bod 模拟
上次的ZJU月赛题,规则比较复杂,当时就连题意都没摸清楚,只觉得非常复杂
比完后敲啊敲啊敲,连续WA啊,该反思下自己,没按照题意来设置条件,题目中说了 白球入袋并且。。。 给对手加分 ,白球未入袋并且。。。给对手加分,这个白球未入袋的情况也要加在判断条件里啊啊啊啊,还有就是有个地方要排序我居然忘了,好久都没发现。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,m; int a[1010]; int vis[10010]; int ans[2]; int hit[1010],c[1010]; int main() { while (scanf("%d%d",&n,&m)!=EOF) { for (int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); memset(vis,0,sizeof vis); int target=0,turn=0; ans[0]=ans[1]=0; int stock,in; for (int i=0;i<m;i++) { scanf("%d",&stock); bool ishit=0; for (int i=0;i<stock;i++) { scanf("%d",&hit[i]); if (hit[i]==a[target]) ishit=1; } sort(hit,hit+stock); scanf("%d",&in); bool flag=false; int sum=0; for (int i=0;i<in;i++) { scanf("%d",&c[i]); if (c[i]==a[target]) flag=true; sum+=c[i]; vis[c[i]]=1; } sort(c,c+in); if (stock==0) { ans[1-turn]+=a[target]; } else if (in!=0 && c[0]==0){ ans[1-turn]+=hit[stock-1]; } else if (stock>1 || (stock==1 && hit[0]!=a[target])){ ans[1-turn]+=hit[stock-1]; } else if (in>0 && flag ) { ans[turn]+=sum; //turn=1-turn; //target++; while (vis[a[target]]) target++; continue; } if (in>0) { ans[1-turn]+=sum; } turn=1-turn; while (vis[a[target]]) target++; } printf("%d : %d\n",ans[0],ans[1]); } return 0; }