题目: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. Hadoop源码解析之: TextInputFormat如何处理跨split的行

    我们知道hadoop将数据给到map进行处理前会使用InputFormat对数据进行两方面的预处理: 对输入数据进行切分,生成一组split,一个split会分发给一个mapper进行处理. 针对每个 ...

  2. 设置不输入密码ssh登录

    在/etc/hosts文件下加入: 192.168.1.60 u60 #设置u60为主机名 在每个节点上创建RSA秘钥: # ssh-keygen -t rsa # 一直按确定键即可 # touch ...

  3. c# winform 弹出确认消息框判断是否删除?

    if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult ...

  4. SQL Server 基础 04 函数与分组查询数据

    函数与分组查询数据 系统函数分 聚合函数.数据类型转换函数.日期函数.数学函数 . . . 1. 聚合函数 主要是对一组值进行计算,然后返回一个值. 聚合函数包括 sum(求和).avg(求平均值). ...

  5. 05-IOSCore - 单例模式、KVO

    单例模式 是设计模式之一,使用频率高,让数据或对象在程序的各个地方都能访问,保持唯一 要素: 各个地方都能访问方法 + 静态消息 只要导入类 就能访问 保持唯一 1.在静态消息内限制对象的创建 2.外 ...

  6. 文本导出到pdf文件(使用QPrinter和QPainter和QTextDocument)

    程序中数据导出是经常有的需求,今天学习把文本导出到pdf文件.主要是用QPrinter,QPainter TextEditToPdf::TextEditToPdf(QWidget *parent, Q ...

  7. 17.1 Replication Configuration 复制:

    17.1 Replication Configuration 复制: 17.1.1 How to Set Up Replication 17.1.2 Replication Formats 17.1. ...

  8. 找出并解决 JavaScript 和 Dojo 引起的浏览器内存泄露问题

    简介: 如果大量使用 JavaScript 和 Ajax 技术开发 Web 2.0 应用程序,您很有可能会遇到浏览器的内存泄漏问题.如果您有一个单页应用程序或者一个页面要处理很多 UI 操作,问题可能 ...

  9. PClady专访中国第一名媛、元媛舞会总裁周采茨女士【图】_摩登前沿 _奢品 _太平洋时尚网

    PClady专访中国第一名媛.元媛舞会总裁周采茨女士[图]_摩登前沿 _奢品 _太平洋时尚网 PClady专访中国第一名媛.元媛舞会总裁周采茨女士

  10. Objective-C基础笔记(5)Protocol

    Protocol简单来说就是一系列方法的列表,当中声明的方法能够被不论什么类实现.这中模式一般称为代理(delegation)模式. 在IOS和OS X开发中,Apple採用了大量的代理模式来实现MV ...