uva 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的更多相关文章
- 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem G: Check The Check(模拟国际象棋)
Problem G: Check The Check Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 10 Solved: 3[Submit][Statu ...
- UVA - 10196:Check The Check
类型:简单模拟 大致题意:已知国际象棋行棋规则,给你一个局面,问是否将军?谁将谁的军?(保证不会同时将军) 思路:都以小写字母 测试 是否将 大写字母. 然后一个局面测两次(一次直接测,一次反转棋盘, ...
- UVA 10196 Morning Walk(欧拉回路)
Problem H Morning Walk Time Limit 3 Seconds Kamalis a Motashotaguy. He has got a new job in Chittago ...
- SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束
SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...
- check约束条件
--约束:对列的值起一个约束性的作用,规定列的值的范围 --主键.外键.非空.自增长标识列.唯一列(unique).check约束 --check 约束 --在某个表里点击右键→设计→进去找到要约束的 ...
- Health Check in eShop -- 解析微软微服务架构Demo(五)
引言 What is the Health Check Health Check(健康状态检查)不仅是对自己应用程序内部检测各个项目之间的健康状态(各项目的运行情况.项目之间的连接情况等),还包括了应 ...
- SQLServer之修改CHECK约束
使用SSMS数据库管理工具修改CHECK约束 1.打开数据库,选择数据表->右键点击->选择设计(或者展开约束,选择约束,右键点击,选择修改,后面步骤相同). 2.选择要修改的数据列-&g ...
- SQL CHECK 约束
SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限 ...
- 约束4:唯一约束,Check约束和null
大家知道,关系型数据库的逻辑运算的结果是三值型的,TRUE,FALSE和UNKNOWN,特别是,NULL值和任何值都不相等,任何值和NULL的比较,返回的逻辑结果都是unknown.而NULL值在唯一 ...
随机推荐
- iOS:(接口适配器3)--iPhone适应不同型号 6/6plus 前
对于不同的苹果设备.检查每个参数<iOS:机型參数.sdk.xcode各版本号>. 机型变化 坐标:表示屏幕物理尺寸大小,坐标变大了.表示机器屏幕尺寸变大了: 像素:表示屏幕 ...
- SICP练习1.6-1.8
1.6 死循环 1.7 #lang racket (define (square x) (* x x)) (define (sqrt-iter guess x) (if (good-enough? g ...
- 一口一口吃掉Hibernate(八)——Hibernate中inverse的用法
一.Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维护之间的关联关系.当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之 ...
- Union - Find 、 Adjacency list 、 Topological sorting Template
Find Function Optimization: After Path compression: int find(int x){ return root[x] == x ? x : (root ...
- Jquery学习笔记:操作form表单元素之一(文本框和下拉框)
一.概述 在web页面开发中,经常需要获取和设置表单元素的值(如文本框中的内容),特别是在ajax应用中,更是常态.本文系统的介绍下如何操作. 同操作其它html元素一样,操作的过程差不多. 第一步, ...
- JRE 和 JDK 的区别是什么?
JRE: Java Runtime Environment JDK:Java Development Kit JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库.是使用java ...
- python binary lib on win/各种python库的二进制包
虽然很不愿意在windows上折腾python,但有时linux不在身边的时候还得在windows上写代码.很久之前找到这个地址,后来忘了,今天搜了半天才把它找到,所以记录一下. http://www ...
- C++中实现对map按照value值进行排序 - 菜鸟变身记 - 51CTO技术博客
C++中实现对map按照value值进行排序 - 菜鸟变身记 - 51CTO技术博客 C++中实现对map按照value值进行排序 2012-03-15 15:32:36 标签:map 职场 休闲 排 ...
- BFS寻路的AS3实现
关于BFS的相关知识由于水平有限就不多说了,感兴趣的可以自己去wiki或者其他地方查阅资料. 这里大概说一下BFS寻路的思路,或者个人对BFS的理解: 大家知道Astar的一个显著特点是带有启发函数, ...
- IOS之【属性列表】
@implementation JamesWongViewController - (void)viewDidLoad { [superviewDidLoad]; [selfwritePerson]; ...