@994495jj
2017-05-31T11:45:22.000000Z
字数 1117
阅读 899
(ACM)数学----博弈论 (ACM)BFS
#include<cstdio>#include<queue>#include<cstring>using namespace std;#define mp make_pairconst int N=7005;queue<pair<int,int> > q;int k[2],a[2][N],f[2][N],deg[2][N];void print(int x) {if(x==1) printf("Win ");else if(x==0) printf("Lose ");else printf("Loop ");}int main() {int n;while(~scanf("%d",&n)) {///initmemset(f,-1,sizeof(f));int tt=q.size();while(tt--) q.pop();///readscanf("%d",&k[0]);for(int i=1;i<=k[0];++i) scanf("%d",&a[0][i]);scanf("%d",&k[1]);for(int i=1;i<=k[1];++i) scanf("%d",&a[1][i]);///get degfor(int i=0;i<n;++i) deg[0][i]=k[0];for(int i=0;i<n;++i) deg[1][i]=k[1];///bfsf[0][n-1]=f[1][n-1]=0;q.push(mp(0,n-1));q.push(mp(1,n-1));while(!q.empty()) {int now=q.front().first;int pos=q.front().second;q.pop();int prn=1-now;for(int i=1;i<=k[prn];++i) {int prp=(pos-a[prn][i]+n)%n;if(f[prn][prp]!=-1) continue;if(f[now][pos]) {--deg[prn][prp];if(deg[prn][prp]==0) {f[prn][prp]=0;q.push(mp(prn,prp));}} else {f[prn][prp]=1;q.push(mp(prn,prp));}}}for(int i=0;i<=1;++i) {for(int j=0;j<n-1;++j) {print(f[i][j]);}puts("");}}return 0;}
