题目:10196 - Check The Check

思路:水题。。模拟

这个代码,前半部分是在数统机房上课的时候写的,挫了点,懒得改了。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
using namespace std;
int dir[8][2]={1,0,1,1,0,1,-1,1,-1,0,-1,-1,0,-1,1,-1};
int move[8][2]={2,1,1,2,-1,2,-2,1,-1,-2,-2,-1,1,-2,2,-1};
char s[9][9];
int cas=0;
int main()
{
while(1)
{
int ans=0;
for(int i=0;i<8;i++)
{
gets(s[i]);
for(int j=0;j<8;j++)
if(s[i][j]=='.')
ans++;
}
if(ans==64)
break;
int ctag=0;
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
if(s[i][j]=='.')
;
else if(s[i][j]=='b')
{
bool t_left=1,t_right=1;
// down
for(int k=1;;k++)
{
if(i+k<8)
{
if(t_left&&j-k>=0)
{
if(s[i+k][j-k]=='K')
{
ctag=1;/// black win
break;
}
else if(s[i+k][j-k]!='.')
{
t_left=0;
}
}
}
else
break;
}
for(int k=1;;k++)
{
if(i+k<8)
{
if(t_right&&j+k<8)
{
if(s[i+k][j+k]=='K')
{
ctag=1; /// black win
break;
}
else if(s[i+k][j+k]!='.')
{
t_right=0;
}
}
}
else
break;
}
// up
t_right=1,t_left=1;
for(int k=1;;k++)
{
if(i-k>=0)
{
if(t_left&&j-k>=0)
{
if(s[i-k][j-k]=='K')
{
ctag=1;/// black win
break;
}
else if(s[i-k][j-k]!='.')
{
t_left=0;
}
}
}
else
break;
}
for(int k=1;;k++)
{
if(i-k>=0)
{
if(t_right&&j+k<8)
{
if(s[i-k][j+k]=='K')
{
ctag=1; /// black win
break;
}
else if(s[i-k][j+k]!='.')
{
t_right=0;
}
}
}
else
break;
}
}
else if(s[i][j]=='B')
{
bool t_left=1,t_right=1;
// down
for(int k=1;;k++)
{
if(i+k<8)
{
if(t_left&&j-k>=0)
{
if(s[i+k][j-k]=='k')
{
ctag=-1;/// white win
break;
}
else if(s[i+k][j-k]!='.')
{
t_left=0;
}
}
}
else
break;
}
for(int k=1;;k++)
{
if(i+k<8)
{
if(t_right&&j+k<8)
{
if(s[i+k][j+k]=='k')
{
ctag=-1; /// white win
break;
}
else if(s[i+k][j+k]!='.')
{
t_right=0;
}
}
}
else
break;
}
// up
t_right=1,t_left=1;
for(int k=1;;k++)
{
if(i-k>=0)
{
if(t_left&&j-k>=0)
{
if(s[i-k][j-k]=='k')
{
ctag=-1;/// white win
break;
}
else if(s[i-k][j-k]!='.')
{
t_left=0;
}
}
}
else
break;
}
for(int k=1;;k++)
{
if(i-k>=0)
{
if(t_right&&j+k<8)
{
if(s[i-k][j+k]=='k')
{
ctag=-1; /// white win
break;
}
else if(s[i-k][j+k]!='.')
{
t_right=0;
}
}
}
else
break;
}
}
else if(s[i][j]=='R')
{
bool right=1,up=1,down=1,left=1;
for(int k=1;;k++)
{
if(right&&j+k<8)
{
if(s[i][j+k]=='k')
{
ctag=-1;
break;
}
else if(s[i][j+k]!='.')
{
right=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(left&&j-k>=0)
{
if(s[i][j-k]=='k')
{
ctag=-1;
break;
}
else if(s[i][j-k]!='.')
{
left=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(up&&i-k>=0)
{
if(s[i-k][j]=='k')
{
ctag=-1;
break;
}
else if(s[i-k][j]!='.')
{
up=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(down&&i+k<8)
{
if(s[i+k][j]=='k')
{
ctag=-1;
break;
}
else if(s[i+k][j]!='.')
{
down=0;
}
}
else
break;
}
}
else if(s[i][j]=='r')
{
bool right=1,up=1,down=1,left=1;
for(int k=1;;k++)
{
if(right&&j+k<8)
{
if(s[i][j+k]=='K')
{
ctag=1;
break;
}
else if(s[i][j+k]!='.')
{
right=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(left&&j-k>=0)
{
if(s[i][j-k]=='K')
{
ctag=1;
break;
}
else if(s[i][j-k]!='.')
{
left=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(up&&i-k>=0)
{
if(s[i-k][j]=='K')
{
ctag=1;
break;
}
else if(s[i-k][j]!='.')
{
up=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(down&&i+k<8)
{
if(s[i+k][j]=='K')
{
ctag=1;
break;
}
else if(s[i+k][j]!='.')
{
down=0;
}
}
else
break;
}
}
else if(s[i][j]=='p')
{
if(i+1<8)
{
if(j+1<8)
{
if(s[i+1][j+1]=='K')
{
ctag=1;
}
}
if(j-1>=0)
{
if(s[i+1][j-1]=='K')
{
ctag=1;
}
}
}
}
else if(s[i][j]=='P')
{
if(i-1>=0)
{
if(j+1<8)
{
if(s[i-1][j+1]=='k')
{
ctag=-1;
}
}
if(j-1>=0)
{
if(s[i-1][j-1]=='k')
{
ctag=-1;
}
}
}
}
else if(s[i][j]=='k')
{
for(int c=0;c<8;c++)
{
int xx=i+dir[c][0];
int yy=j+dir[c][1];
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='K')
{
ctag=1;
}
}
}
}
else if(s[i][j]=='K')
{
for(int c=0;c<8;c++)
{
int xx=i+dir[c][0];
int yy=j+dir[c][0];
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='k')
{
ctag=-1;
}
}
}
}
else if(s[i][j]=='N')
{
for(int c=0;c<8;c++)
{
int xx=i+move[c][0];
int yy=j+move[c][1];
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='k')
{
ctag=-1;
}
}
}
}
else if(s[i][j]=='n')
{
for(int c=0;c<8;c++)
{
int xx=i+move[c][0];
int yy=j+move[c][1];
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='K')
{
ctag=1;
}
}
}
}
else if(s[i][j]=='q')
{
for(int c=0;c<8;c++)
{
for(int k=1;;k++)
{
int xx=i+dir[c][0]*k;
int yy=j+dir[c][1]*k;
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='K')
{
ctag=1;
break;
}
else if(s[xx][yy]!='.')
break;
}
else
break;
}
}
}
else if(s[i][j]=='Q')
{
for(int c=0;c<8;c++)
{
for(int k=1;;k++)
{
int xx=i+dir[c][0]*k;
int yy=j+dir[c][1]*k;
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='k')
{
ctag=-1;
break;
}
else if(s[xx][yy]!='.')
break;
}
else
break;
}
}
}
//printf("%c",s[i][j]);
} printf("Game #%d: ",++cas);
if(ctag==-1)
printf("black king is in check.\n");
else if(ctag==1)
printf("white king is in check.\n");
else
printf("no king is in check.\n");
getchar();
}
return 0;
}

uva 10196 Check The Check的更多相关文章

  1. 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem G: Check The Check(模拟国际象棋)

    Problem G: Check The Check Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 10  Solved: 3[Submit][Statu ...

  2. UVA - 10196:Check The Check

    类型:简单模拟 大致题意:已知国际象棋行棋规则,给你一个局面,问是否将军?谁将谁的军?(保证不会同时将军) 思路:都以小写字母 测试 是否将 大写字母. 然后一个局面测两次(一次直接测,一次反转棋盘, ...

  3. UVA 10196 Morning Walk(欧拉回路)

    Problem H Morning Walk Time Limit 3 Seconds Kamalis a Motashotaguy. He has got a new job in Chittago ...

  4. SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束

    SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...

  5. check约束条件

    --约束:对列的值起一个约束性的作用,规定列的值的范围 --主键.外键.非空.自增长标识列.唯一列(unique).check约束 --check 约束 --在某个表里点击右键→设计→进去找到要约束的 ...

  6. Health Check in eShop -- 解析微软微服务架构Demo(五)

    引言 What is the Health Check Health Check(健康状态检查)不仅是对自己应用程序内部检测各个项目之间的健康状态(各项目的运行情况.项目之间的连接情况等),还包括了应 ...

  7. SQLServer之修改CHECK约束

    使用SSMS数据库管理工具修改CHECK约束 1.打开数据库,选择数据表->右键点击->选择设计(或者展开约束,选择约束,右键点击,选择修改,后面步骤相同). 2.选择要修改的数据列-&g ...

  8. SQL CHECK 约束

    SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限 ...

  9. 约束4:唯一约束,Check约束和null

    大家知道,关系型数据库的逻辑运算的结果是三值型的,TRUE,FALSE和UNKNOWN,特别是,NULL值和任何值都不相等,任何值和NULL的比较,返回的逻辑结果都是unknown.而NULL值在唯一 ...

随机推荐

  1. Jetty:配置概览-须要配置什么

    上一节讲述了怎么配置Jetty,这节将告诉你使用Jetty你须要配置些什么. 配置Server Server实例是Jetty服务端的中心协调对象,它为全部其它Jetty服务端组件提供服务和生命周期管理 ...

  2. 多模块Maven项目怎样使用javadoc插件生成文档

    需求 近期要对一个项目结构例如以下的Maven项目生成JavaDoc文档. Project                         |-- pom.xml                   ...

  3. linux查看端口和进程

    查看进程 ps -aux | grep appname 杀死进程 kill pid 查看端口: netstat -ap | grep 端口号 netstat -ap | grep 进程名字 lsof ...

  4. 再写KMP算法

    #include<iostream> #include<string> using namespace std; void getNext(char const*T,int l ...

  5. new Handler().postDelayed() 延迟intent跳转

    原文地址http://blog.csdn.net/x605940745/article/details/19401549 new Handler().postDelayed(new Runnable( ...

  6. [置顶] Android4.0中修改挂断键(ENDCALL)的默认行为

    文件: frameworks/base/core/java/android/provider/Setings.java public static final String END_BUTTON_BE ...

  7. mysql 结合keepalived测试

    vip:192.168.32.66 192.168.32.6 主库: mysql> show variables like '%read_only%'; +------------------+ ...

  8. 四大流行的jdbc连接池之C3P0篇

    C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSourc ...

  9. Java中的字符串驻留

    转自:http://www.cdtarena.com/javapx/201307/9088.html 最近在工作的时候,一句再正常不过的代码String a = “hello” + “world”;被 ...

  10. hdu 3998 (dp+最大流)

    题意:求最长上升子序列的长度和数量. 分析:用dp求出最长上升子序列m,dp数组存的就是该元素为子序列结尾的长度,源点与长度为1的点建边,长度为m的与汇点连边,然后枚举任意两个元素,ai,aj(ai& ...