Counting Black
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 10754 | Accepted: 6940 |
Description
There is a board with 100 * 100 grids as shown below. The left-top gird is denoted as (1, 1) and the right-bottom grid is (100, 100).
We may apply three commands to the board:
In the beginning, all the grids on the board are white. We apply a series of commands to the board. Your task is to write a program to give the numbers of black grids within a required region when a TEST command is applied.
![](https://i-blog.csdnimg.cn/blog_migrate/5e2352d82eac5e226625773fae95cd7f.jpeg)
We may apply three commands to the board:
1. WHITE x, y, L // Paint a white square on the board, // the square is defined by left-top grid (x, y) // and right-bottom grid (x+L-1, y+L-1) 2. BLACK x, y, L // Paint a black square on the board, // the square is defined by left-top grid (x, y) // and right-bottom grid (x+L-1, y+L-1) 3. TEST x, y, L // Ask for the number of black grids // in the square (x, y)- (x+L-1, y+L-1)
In the beginning, all the grids on the board are white. We apply a series of commands to the board. Your task is to write a program to give the numbers of black grids within a required region when a TEST command is applied.
Input
The first line of the input is an integer t (1 <= t <= 100), representing the number of commands. In each of the following lines, there is a command. Assume all the commands are legal which means that they won't try to paint/test the grids outside the board.
Output
For each TEST command, print a line with the number of black grids in the required region.
Sample Input
5 BLACK 1 1 2 BLACK 2 2 2 TEST 1 1 3 WHITE 2 1 1 TEST 1 1 3
Sample Output
7 6
Source
思路:简单的模拟题,按照题目要求进行模拟就行了
AC代码如下:
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
const int maxn=100+5;
int mp[maxn][maxn];
void paint(int x,int y,int l,int sign){
for(int i=x;i<=x+l-1;i++)
for(int j=y;j<=y+l-1;j++){
if(sign) mp[i][j]=1;
else mp[i][j]=0;
}
}
void show(int x,int y,int l){
int cnt=0;
for(int i=x;i<=x+l-1;i++)
for(int j=y;j<=y+l-1;j++){
if(mp[i][j])
cnt++;
}
cout<<cnt<<endl;
}
int main(){
int n;
while(cin>>n){
memset(mp,0,sizeof(mp));
string tmp;
int x,y,l;
for(int i=0;i<n;i++){
cin>>tmp>>x>>y>>l;
if(tmp=="BLACK")
paint(x,y,l,1);
else if(tmp=="WHITE")
paint(x,y,l,0);
else show(x,y,l);
}
}
return 0;
}