1.6.7 Check the Check
来源:互联网 发布:淘宝店铺售假怎么申诉 编辑:程序博客网 时间:2024/06/10 22:33
恶心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;}
- 1.6.7 Check the Check
- 1.6.7 将军 Check the Check
- check the check
- 110107 Check The Check
- 10196 - Check The Check
- uva-10196 - Check The Check
- UVa-10196-Check the Check
- UVaOJ 10196 - Check The Check
- UVA - 10196 - Check The Check
- 将军(check the check)
- UVa 10196 - Check The Check
- UVa 10196 Check the Check
- UVa 10196 - Check The Check
- 【OJ】1.6.7将军(Check the Check)UVa 10196 // PC 1101017 // acmclub.com 25177
- check
- CHECK
- UVa Problem Solution: 10196 - Check The Check
- UVa 10196 - Check The Check (模拟)
- DESC[RIBE] (SQL*Plus command)
- 在RHEL 5.4(Tikanga)下搭建PHP+Memcached
- c文件操作的一般流程
- Wireless tools资料收集
- char和wchar_t互相转换
- 1.6.7 Check the Check
- dede所有目录模板全解
- Iphone 官方的开发指南
- ACM最长单调递增子序列问题(动态规划)o(n*n)C++实现
- BCGControlBar支持中文的问题
- enter键提交
- error C2440: 'static_cast' LRESULT LRESULT错误
- MySQL数据导入与导出
- 设置按钮背景图片(HTML-CSS)