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 暴力的更多相关文章

  1. 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 ...

  2. Codeforces Gym 100803F There is No Alternative 暴力Kruskal

    There is No Alternative 题目连接: http://codeforces.com/gym/100803/attachments Description ICPC (Isles o ...

  3. Codeforces Gym 100286J Javanese Cryptoanalysis 傻逼暴力

    原题地址:http://codeforces.com/gym/100286/attachments/download/2013/20082009-acmicpc-northeastern-europe ...

  4. Codeforces Gym 100342C Problem C. Painting Cottages 暴力

    Problem C. Painting CottagesTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1 ...

  5. 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 ...

  6. Codeforces Gym 100203G G - Good elements 标记暴力

    G - Good elementsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  7. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  8. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  9. Codeforces Gym 101623A - 动态规划

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...

随机推荐

  1. 【大数取模】HDOJ-1134、CODEUP-1086

    1086: 大数取模   题目描述 现给你两个正整数A和B,请你计算A mod B.为了使问题简单,保证B小于100000. 输入 输入包含多组测试数据.每行输入包含两个正整数A和B.A的长度不超过1 ...

  2. .net-C#代码判断

    ylbtech-doc:.net-C#代码判断 C#代码判断 1.A,C#代码判断返回顶部 01.{ C#题目}public static void Main(string[] args){     ...

  3. 获取手机内存\可用内存\单个APP运行内存

    /** 手机总内存 */ private String getTotalMemory() { // 系统内存信息文件 String str1 = "/proc/meminfo"; ...

  4. Web自动化框架搭建——前言

    1.web测试功能特性 a.功能逻辑测试(功能测试),这一块所有系统都是一致的,比如数据的添加.删除.修改:功能测试案例设计感兴趣和有时间的话可以另外专题探讨: b.浏览器兼容性测试,更重要的是体验这 ...

  5. CSS常用十大技巧

    技巧1  去掉网页超链接的下划线 去掉网页超链接的下划线,在<head>与</head>之间相应的位置输入以下代码. <style type="text/css ...

  6. vc编译器 msvcr.dll、msvcp.dll的含义和相关错误的处理

    转自:http://blog.csdn.net/sptoor/article/details/6203376 很久没有写程式设计入门知识的相关文章了,这篇文章要来谈谈程式库 (Library) 连结, ...

  7. C++一些特殊的类的设计

      一.设计一个只能在栈上分配空间的类 重写类的opeator new 操作,并声明为private,一个大概的代码如下: class StackOnly { public: StackOnly(){ ...

  8. Spark中的编程模型

    1. Spark中的基本概念 Application:基于Spark的用户程序,包含了一个driver program和集群中多个executor. Driver Program:运行Applicat ...

  9. html学习笔记之position

    今天主要一直看试验position的各种属性,现在记录下来以此备忘. position有四种常有属性,分别是static,fixed.absolute,relative fixed就是相对于窗口的位置 ...

  10. homework07

    我阅读的: http://www.cnblogs.com/zhuyp1015/category/370450.html http://blog.csdn.net/hzyong_c/article/de ...