Codeforces Gym 100650D Queens, Knights and Pawns 暴力
Problem D: Queens, Knights and Pawns
Time Limit: 20 Sec
Memory Limit: 256 MB
题目连接
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88443#problem/D
Description
You all are familiar with the famous 8-queens problem which asks you to place 8 queens on a chess board so no two attack each other. In this problem, you will be given locations of queens and knights and pawns and asked to find how many of the unoccupied squares on the board are not under attack from either a queen or a knight (or both). We’ll call such squares “safe” squares. Here, pawns will only serve as blockers and have no capturing ability. The board below has 6 safe squares. (The shaded squares are safe.) Q P Q K Recall that a knight moves to any unoccupied square that is on the opposite corner of a 2x3 rectangle from its current position; a queen moves to any square that is visible in any of the eight horizontal, vertical, and diagonal directions from the current position. Note that the movement of a queen can be blocked by another piece, while a knight’s movement can not.
Input
There will be multiple test cases. Each test case will consist of 4 lines. The first line will contain two integers n and m, indicating the dimensions of the board, giving rows and columns, respectively. Neither integer will exceed 1000. The next three lines will each be of the form k r1 c1 r2 c2 · · · rk ck indicating the location of the queens, knights and pawns, respectively. The numbering of the rows and columns will start at one. There will be no more than 100 of any one piece. Values of n = m = 0 indicate end of input.
Output
Each test case should generate one line of the form Board b has s safe squares. where b is the number of the board (starting at one) and you supply the correct value for s.
Sample Input
4 4 2 1 4 2 4 1 1 2 1 2 3 2 3 1 1 2 1 1 1 0 1000 1000 1 3 3 00 0 0
Sample Output
Board 1 has 6 safe squares. Board 2 has 0 safe squares. Board 3 has 996998 safe squares.
HINT
题意
给你一个棋盘,棋盘上面有士兵,有皇后,有马
士兵不会动,皇后攻击范围是八个方向的直线,马是日字
然后问你最后有多少个格子是安全的
题解:
直接暴力就好了
代码:
//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 200051
#define mod 10007
#define eps 1e-9
int Num;
//const int inf=0x7fffffff; //нчоч╢С
const int inf=0x3f3f3f3f;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
//************************************************************************************** int n,m;
int s[][];
//queens, knights and pawns
int ans=;
void check(int x,int y)
{
if(x<||x>n||y<||y>m)
return;
if(s[x][y]==)
{
s[x][y]=;
ans++;
}
}
void at_queue(int x,int y)
{
check(x,y);
for(int i=x;i<=n;i++)
{
if(s[i][y]==)
break;
check(i,y);
}
for(int i=x;i>=;i--)
{
if(s[i][y]==)
break;
check(i,y);
}
for(int i=y;i>=;i--)
{
if(s[x][i]==)
break;
check(x,i);
}
for(int i=y;i<=m;i++)
{
if(s[x][i]==)
break;
check(x,i);
}
for(int i=x,j=y;i<=n&&j<=m;i++,j++)
{
if(s[i][j]==)
break;
check(i,j);
}
for(int i=x,j=y;i>=&&j>=;j--,i--)
{
if(s[i][j]==)
break;
check(i,j);
}
for(int i=x,j=y;i>=&&j<=m;i--,j++)
{
if(s[i][j]==)
break;
check(i,j);
}
for(int i=x,j=y;i<=n&&j>=;i++,j--)
{
if(s[i][j]==)
break;
check(i,j);
}
}
void at_knight(int x,int y)
{
check(x,y);
check(x+,y+);
check(x+,y+);
check(x-,y+);
check(x-,y+);
check(x+,y-);
check(x+,y-);
check(x-,y-);
check(x-,y-);
}
struct node
{
int x,y;
};
node que[];
node kni[];
int main()
{
int t=;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==&&m==)
break;
ans=;
memset(que,,sizeof(que));
memset(kni,,sizeof(kni));
memset(s,,sizeof(s));
int k1=read();
for(int i=;i<k1;i++)
{
que[i].x=read();
que[i].y=read();
}
int k2=read();
for(int i=;i<k2;i++)
{
kni[i].x=read();
kni[i].y=read();
int x=kni[i].x,y=kni[i].y;
if(s[x][y]==)
{
s[x][y]=;
ans++;
}
}
int k3=read();
for(int i=;i<k3;i++)
{
int x=read();
int y=read();
if(s[x][y]==)
{
s[x][y]=;
ans++;
}
}
for(int i=;i<k1;i++)
at_queue(que[i].x,que[i].y);
for(int i=;i<k2;i++)
at_knight(kni[i].x,kni[i].y);
printf("Board %d has %d safe squares.\n",t++,n*m-ans);
}
}
Codeforces Gym 100650D Queens, Knights and Pawns 暴力的更多相关文章
- sicily 1172. Queens, Knights and Pawns
Description You all are familiar with the famous 8-queens problem which asks you to place 8 queens o ...
- Codeforces Gym 100803F There is No Alternative 暴力Kruskal
There is No Alternative 题目连接: http://codeforces.com/gym/100803/attachments Description ICPC (Isles o ...
- Codeforces Gym 100286J Javanese Cryptoanalysis 傻逼暴力
原题地址:http://codeforces.com/gym/100286/attachments/download/2013/20082009-acmicpc-northeastern-europe ...
- Codeforces Gym 100342C Problem C. Painting Cottages 暴力
Problem C. Painting CottagesTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1 ...
- Codeforces Gym 100513I I. Sale in GameStore 暴力
I. Sale in GameStore Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/p ...
- Codeforces Gym 100203G G - Good elements 标记暴力
G - Good elementsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101623A - 动态规划
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...
随机推荐
- 【WEB小工具】BaseServlet—一个Servlet处理多个请求
package cn.itcast.test.web.servlet; import java.io.IOException; import java.io.PrintWriter; import j ...
- ecshop init.php文件分析
1. ecshop init.php文件分析 2. <?php 3. 4. /** 5. * ECSHOP 前台公用文件 6. * ===================== ...
- C# 委托总结
总结 委托的本质: 委托是一种特殊的数据类型,它表示某种特定类型的函数,并且可以表示多个函数,将这些函数串联起来.使用委托就好像函数调用一样. 委托实质上是一个类,编译器会根据关键字delegate自 ...
- User Agent
Android: Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; MI-ONE Plus Build/GINGERBREAD) AppleWebKit/533 ...
- [King.yue]Ext.Net 正则表达式用法
例: .Regex("^[A-Za-z0-9]+$") //正则表达式 .InvalidText("只能输入英文字符和数字.")); //输入错误提示
- STM32 TIM重映射
复用功能 没有重映射 部分重映射 完全重映射 TIM3_CH1 PA6 PB4 PC6 CH2 PA7 PB5 PC7 CH3 PB0 PB0 PC8 CH4 PB1 PB1 PC9 /**重映射 t ...
- Sql中判断“数据库"、"表"、"临时表"、"存储过程"和列”是否存在
--判断数据库是否存在 IF EXISTS (SELECT * FROM MASTER..sysdatabases WHERE NAME = ''库名'') PRINT ''exists ...
- [JLOI2013]地形生成
JLOI2013过了好长时间,才写第四题.. 第一问比较好想. 第二问我想到了n^3次方的做法,但是数据....于是没敢写,然后上网查了一下题解,居然是O(n^3)过的,数据这么弱... /* * P ...
- 查看Linux里某文件的前面/后面几行中的某一行
如,我想看/etc/profile文件的前5行里的第5行. 则, head -5 /etc/profile | tail -1 管道|啊,很简单,就是把左边命令的结果,作为右边的输入. 如, ...
- 现代程序设计homework——04
题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...