hdoj5480 Conturbatio(思维)

来源:互联网 发布:航迹规划 算法 编辑:程序博客网 时间:2024/06/18 18:50
Problem Description
There are many rook on a chessboard, a rook can attack the row and column it belongs, including its own place.

There are also many queries, each query gives a rectangle on the chess board, and asks whether every grid in the rectangle will be attacked by any rook?
 

Input
The first line of the input is a integer T, meaning that there are T test cases.

Every test cases begin with four integers n,m,K,Q.
K is the number of Rook, Q is the number of queries.

Then K lines follow, each contain two integers x,y describing the coordinate of Rook.

Then Q lines follow, each contain four integers x1,y1,x2,y2 describing the left-down and right-up coordinates of query.

1n,m,K,Q100,000.

1xn,1ym.

1x1x2n,1y1y2m.
 

Output
For every query output "Yes" or "No" as mentioned above.
 

Sample Input
22 2 1 21 11 1 1 22 1 2 22 2 2 11 11 22 1 2 2
 

Sample Output
YesNo

Yes

有一个n*m的棋盘,有k个车(和象棋里的车一样),有q次询问,问车是否能将给出的矩形的所有格子打到,给出车的坐标,矩形左下角的坐标和右上角的坐标.cow[i]表示以第i行结尾的矩形,col[i]表示以第i列结尾的矩形.

代码如下:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int cow[100010];int col[100010];int main(){int n,m,k,q;int t;scanf("%d",&t);while(t--){scanf("%d%d%d%d",&n,&m,&k,&q);memset(cow,0,sizeof(cow));memset(col,0,sizeof(col));int i;int x,y;for(i=0;i<k;i++){scanf("%d%d",&x,&y);cow[x]=col[y]=1;}for(i=1;i<=n;i++){if(cow[i])cow[i]+=cow[i-1];}for(i=1;i<=m;i++){if(col[i])col[i]+=col[i-1];}int x1,x2,y1,y2;for(i=1;i<=q;i++){scanf("%d%d%d%d",&x1,&y1,&x2,&y2);if(cow[x2]>=x2-x1+1||col[y2]>=y2-y1+1)printf("Yes\n");elseprintf("No\n");}}}


0 0