Compete

I can't fall down before I die

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  11 Posts :: 3 Stories :: 2 Comments :: 0 Trackbacks

常用链接

留言簿(2)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

  1#include<iostream>
  2using namespace std;
  3char a[20][20];
  4char b1[20][20];
  5char b2[20][20];
  6bool check1(char p[20][20]);
  7bool check2(char p[20][20]);
  8int n;
  9void check();
 10int r,c;
 11int endr,endc;
 12char ch,endch;
 13int main()
 14{
 15    int i,j;
 16    int cas;
 17    cin>>cas;
 18    while(cas--)
 19    {
 20        for(i=1;i<=19;i++)
 21            for(j=1;j<=19;j++)
 22                cin>>a[i][j];
 23        check();
 24    }

 25    return 0;
 26}

 27
 28void check()
 29{
 30    int i,j,k;
 31    char temp;
 32    for(i=1;i<=19;i++)
 33    {
 34        for(j=i;j<=19;j++)
 35        {
 36            b1[i][j]=a[j][i];
 37            b1[j][i]=a[i][j];
 38        }

 39    }

 40    
 41    if(check1(a))/////////////////////////////横行
 42    {
 43        cout<<ch<<endl;
 44        cout<<r<<' '<<c<<endl;
 45        return;
 46    }

 47    if(check1(b1))//////////////////////////////////纵行(转置后的a相当于b)
 48    {
 49        cout<<ch<<endl;
 50        cout<<c<<' '<<r<<endl;
 51        return;
 52    }

 53
 54
 55    if(check2(a))/////////////////////////////////下三角a
 56    {
 57        cout<<ch<<endl;
 58        cout<<r<<' '<<c<<endl;
 59        return;
 60    }

 61    if(check2(b1))///////////////////////////////////上三角a相当于下三角b
 62    {
 63        cout<<ch<<endl;
 64        cout<<c<<' '<<r<<endl;
 65        return;
 66    }

 67    
 68    for(i=19,j=1;i>=j;i--,j++)/////////////////////////////列转置
 69    {
 70        k=1;
 71        while(k<=19)
 72        {
 73            b2[k][i]=a[k][j];
 74            b2[k][j]=a[k][i];
 75            k++;
 76        }

 77    }

 78    
 79    if(check2(b2))/////////////////////////////////////////从右上到左下,计算下三角
 80    {
 81        cout<<ch<<endl;
 82        cout<<endr<<' '<<20-endc<<endl;
 83        return;
 84    }

 85    
 86    for(i=1;i<=19;i++)
 87    {
 88        for(j=i;j<=19;j++)
 89        {
 90            temp=b2[i][j];
 91            b2[i][j]=b2[j][i];
 92            b2[j][i]=temp;
 93        }

 94    }

 95    if(check2(b2))//////////////////////////////////////////计算上三角
 96    {
 97        cout<<ch<<endl;
 98        cout<<endc<<' '<<20-endr<<endl;
 99        return;
100    }

101    
102    else cout<<'0'<<endl;
103}

104bool check1(char p[20][20])
105{
106    int i,j,k;
107    for(i=1;i<=19;i++)
108    {
109        for(j=1;j<=15;j++)
110        {
111            if(p[i][j]=='0')
112                continue;
113            for(k=1;k<=4;k++)
114            {
115                if(p[i][j+k]!=p[i][j])
116                    break;
117            }

118            if(k==5)
119            {
120                if(j+k==20)
121                {
122                    r=i;
123                    c=j;
124                    ch=p[i][j];
125                    return true;
126                }

127                else if(p[i][j+k]==p[i][j])
128                {
129                    while(p[i][j]==p[i][j+k])
130                    {
131                        k++;
132                        if(j+k==20)
133                            break;
134                    }

135                    j=j+k-1;
136                }

137                else
138                {
139                    ch=p[i][j];
140                    r=i;
141                    c=j;
142                    return true;
143                }

144            }

145            else 
146            {
147                j=j+k-1;
148            }

149        }

150    }

151    return false;
152}

153
154bool check2(char p[20][20])
155{
156    int i,j,k,m;
157    for(i=1;i<=15;i++)
158    {
159        j=1;
160        m=i;
161        while(j<20&&m<20)
162        {
163            if(p[m][j]=='0')
164            {
165                j++;
166                m++;
167                continue;
168            }

169            
170            for(k=1;k<=4;k++)
171            {
172                if(p[m][j]!=p[m+k][j+k])
173                    break;
174            }

175            if(k==5)
176            {
177                if(j+k==20)
178                {
179                    ch=p[m][j];
180                    endch=p[m+k-1][j+k-1];
181                    r=m;
182                    c=j;
183                    endr=m+k-1;
184                    endc=j+k-1;
185                    return true;
186                }

187                else if(p[m+k][j+k]==p[m][j])
188                {
189                    m=m+k;
190                    j=j+k;
191                    while(p[m][j]==p[m-1][j-1])
192                    {
193                        m++;
194                        j++;
195                        if(m>=20)
196                            break;
197                    }

198                }

199                else
200                {
201                    ch=p[m][j];
202                    endch=p[m+k-1][j+k-1];
203                    r=m;
204                    c=j;
205                    endr=m+k-1;
206                    endc=j+k-1;
207                    return true;
208                }

209            }

210            else
211            {
212                j=j+k;
213                m=m+k;
214            }

215        }

216    }

217    return false;
218}
posted on 2010-04-20 10:41 丁立洋 阅读(485) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理