1.6.7 Check the Check

來源:互聯網
上載者:User

噁心OJ噁心題! 類比法太噁心了!!

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int chess[100][100];bool cross1( int x,int y,char aim ){     if( chess[x][y]==aim )         return true;     if( chess[x][y]!='.' )         return false;     if( x-1>=11 && y-1>=11 )         return cross1( x-1,y-1,aim );     return false;}bool cross2( int x,int y,char aim ){     if( chess[x][y]==aim )         return true;     if( chess[x][y]!='.' )         return false;     if( x-1>=11 )         return cross2( x-1,y,aim );     return false;}bool cross3( int x,int y,char aim ){     if( chess[x][y]==aim )         return true;     if( chess[x][y]!='.' )         return false;     if( x-1>=11 && y+1<=18 )         return cross3( x-1,y+1,aim );     return false;}bool cross4( int x,int y,char aim ){     if( chess[x][y]==aim )         return true;     if( chess[x][y]!='.' )         return false;     if( y+1<=18 )         return cross4( x,y+1,aim );     return false;}bool cross5( int x,int y,char aim ){     if( chess[x][y]==aim )         return true;     if( chess[x][y]!='.' )         return false;     if( x+1<=18 && y+1<=18 )         return cross5( x+1,y+1,aim );     return false;}bool cross6( int x,int y,char aim ){     if( chess[x][y]==aim )         return true;     if( chess[x][y]!='.' )         return false;     if( x+1<=18 )         return cross6( x+1,y,aim );     return false;}bool cross7( int x,int y,char aim ){     if( chess[x][y]==aim )         return true;     if( chess[x][y]!='.' )         return false;     if( x+1<=18 && y-1>=11 )         return cross7( x+1,y-1,aim );     return false;}bool cross8( int x,int y,char aim ){     if( chess[x][y]==aim )         return true;     if( chess[x][y]!='.' )         return false;     if( y-1>=11 )         return cross8( x,y-1,aim );     return false;}int main(){    int N=8;    int T=0;    //freopen( "in.txt","r",stdin );    //freopen( "out.txt","w",stdout );    while( true )    {           bool conti=false;           for( int i=11;i<=18;i++ )           for( int j=11;j<=18;j++ )           {                scanf( "\n%c",&chess[i][j] );                if( chess[i][j]!='.' )                    conti=true;               }           if( !conti )               break;           int sum=0;              for( int i=11;i<=18;i++ )           for( int j=11;j<=18;j++ )           {                if( chess[i][j]=='.' )                    continue;                if( sum!=0 )                    goto bed;                else if( chess[i][j]=='p' && sum==0 )                {                    if( chess[i+1][j-1]=='K' || chess[i+1][j+1]=='K' )                        sum+=(sum==0)?1:0;                }                else if( chess[i][j]=='n' && sum==0 )                {                     if( chess[i-1][j-2]=='K' )sum+=(sum==0)?1:0;                     if( chess[i-2][j-1]=='K' )sum+=(sum==0)?1:0;                     if( chess[i-2][j+1]=='K' )sum+=(sum==0)?1:0;                     if( chess[i-1][j+2]=='K' )sum+=(sum==0)?1:0;                     if( chess[i+1][j+2]=='K' )sum+=(sum==0)?1:0;                     if( chess[i+2][j+1]=='K' )sum+=(sum==0)?1:0;                     if( chess[i+2][j-1]=='K' )sum+=(sum==0)?1:0;                     if( chess[i+1][j-2]=='K' )sum+=(sum==0)?1:0;                }                else if( chess[i][j]=='b' && sum==0 )                {                     if( cross1( i-1,j-1,'K' ) ) sum+=(sum==0)?1:0;                     if( cross3( i-1,j+1,'K' ) ) sum+=(sum==0)?1:0;                     if( cross5( i+1,j+1,'K' ) ) sum+=(sum==0)?1:0;                     if( cross7( i+1,j-1,'K' ) ) sum+=(sum==0)?1:0;                }                else if( chess[i][j]=='r' && sum==0 )                {                     if( cross2( i-1,j,'K' ) ) sum+=(sum==0)?1:0;                     if( cross4( i,j+1,'K' ) ) sum+=(sum==0)?1:0;                     if( cross6( i+1,j,'K' ) ) sum+=(sum==0)?1:0;                     if( cross8( i,j-1,'K' ) ) sum+=(sum==0)?1:0;                }                else if( chess[i][j]=='q' && sum==0 )                {                     if( cross1( i-1,j-1,'K' ) ) sum+=(sum==0)?1:0;                     if( cross2( i-1,j,'K' ) ) sum+=(sum==0)?1:0;                     if( cross3( i-1,j+1,'K' ) ) sum+=(sum==0)?1:0;                     if( cross4( i,j+1,'K' ) ) sum+=(sum==0)?1:0;                     if( cross5( i+1,j+1,'K' ) ) sum+=(sum==0)?1:0;                     if( cross6( i+1,j,'K' ) ) sum+=(sum==0)?1:0;                     if( cross7( i+1,j-1,'K' ) ) sum+=(sum==0)?1:0;                     if( cross8( i,j-1,'K' ) ) sum+=(sum==0)?1:0;                }                //------------------------------------------------------------                else if( chess[i][j]=='P' && sum==0 )                {                    if( chess[i-1][j-1]=='k' || chess[i-1][j+1]=='k' )                        sum+=(sum==0)?2:0;                }                else if( chess[i][j]=='N' && sum==0 )                {                     if( chess[i-1][j-2]=='k' )sum+=(sum==0)?2:0;                     if( chess[i-2][j-1]=='k' )sum+=(sum==0)?2:0;                     if( chess[i-2][j+1]=='k' )sum+=(sum==0)?2:0;                     if( chess[i-1][j+2]=='k' )sum+=(sum==0)?2:0;                     if( chess[i+1][j+2]=='k' )sum+=(sum==0)?2:0;                     if( chess[i+2][j+1]=='k' )sum+=(sum==0)?2:0;                     if( chess[i+2][j-1]=='k' )sum+=(sum==0)?2:0;                     if( chess[i+1][j-2]=='k' )sum+=(sum==0)?2:0;                }                else if( chess[i][j]=='B' && sum==0 )                {                     if( cross1( i-1,j-1,'k' ) ) sum+=(sum==0)?2:0;                     if( cross3( i-1,j+1,'k' ) ) sum+=(sum==0)?2:0;                     if( cross5( i+1,j+1,'k' ) ) sum+=(sum==0)?2:0;                     if( cross7( i+1,j-1,'k' ) ) sum+=(sum==0)?2:0;                }                else if( chess[i][j]=='R' && sum==0 )                {                     if( cross2( i-1,j,'k' ) ) sum+=(sum==0)?2:0;                     if( cross4( i,j+1,'k' ) ) sum+=(sum==0)?2:0;                     if( cross6( i+1,j,'k' ) ) sum+=(sum==0)?2:0;                     if( cross8( i,j-1,'k' ) ) sum+=(sum==0)?2:0;                }                else if( chess[i][j]=='Q' && sum==0 )                {                     if( cross1( i-1,j-1,'k' ) ) sum+=(sum==0)?2:0;                     if( cross2( i-1,j,'k' ) ) sum+=(sum==0)?2:0;                     if( cross3( i-1,j+1,'k' ) ) sum+=(sum==0)?2:0;                     if( cross4( i,j+1,'k' ) ) sum+=(sum==0)?2:0;                     if( cross5( i+1,j+1,'k' ) ) sum+=(sum==0)?2:0;                     if( cross6( i+1,j,'k' ) ) sum+=(sum==0)?2:0;                     if( cross7( i+1,j-1,'k' ) ) sum+=(sum==0)?2:0;                     if( cross8( i,j-1,'k' ) ) sum+=(sum==0)?2:0;                }           }           bed:           printf( "Game #%d: ",++T );           if( sum==0 )              printf( "no king is in check.\n" );            else if( sum==2 )              printf( "black king is in check.\n" );            else if( sum==1 )              printf( "white king is in check.\n" );    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.