uva141

来源:互联网 发布:吴江js华腾公寓自提柜 编辑:程序博客网 时间:2024/06/08 08:57
#include <iostream>#include <stdio.h>#include <string.h>#include <map>using namespace std;string s,s1,s2,s3;int move_;map<string,int> m;int n;void equal_string(int t){    m[s]++;    if(m[s]==2) move_=t+1;    s1=s;    s2=s;    s3=s;    if(m[s]>=2) move_=t+1;    for(int i=0; i<n; i++)        for(int j=0; j<n; j++)            s1[j*n+n-i-1]=s[i*n+j];    for(int i=0; i<n; i++)        for(int j=0; j<n; j++)            s2[(n-i-1)*n+n-j-1]=s[i*n+j];    for(int i=0; i<n; i++)        for(int j=0; j<n; j++)            s3[(n-j-1)*n+i]=s[i*n+j];    if(s!=s1) m[s1]++;    if(s!=s2 && s1!=s2) m[s2]++;    if(s!=s3 && s1!=s3 && s2!=s3) m[s3]++;    if(m[s1]==2) move_=t+1;    if(m[s2]==2) move_=t+1;    if(m[s3]==2) move_=t+1;}int main(){    while(scanf("%d",&n),n)    {        move_=0;        m.clear();        s.clear();        for(int t=0; t<n*n; t++)                s.push_back('0');//这个bug找了好久……不能用数组形式        for(int i=0; i<2*n; i++)        {            int a,b;            char c;            scanf("%d%d %c",&a,&b,&c);            if(c=='+') s[(a-1)*n+b-1]='1';            else s[(a-1)*n+b-1]='0';            equal_string(i);        }        if(move_) printf("Player %d wins on move %d\n",move_%2+1,move_);        else printf("Draw\n");    }    return 0;}
原创粉丝点击