题目链接:http://poj.org/problem?id=1656
方法:hash
思路:很简单的hash,注意方格是按照坐上的坐标定义的,然后根据规则染色就可以了。
难点:注意hash数组在何时清零很重要,本题的hash表不大,完全可以在main内声明的时候赋值为0,否则就要用到memset了
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const int MAX = 110;
int main()
{
int n;
while(~scanf("%d",&n))
{
int board[110][110] = {0};
while(n--)
{
string com;
int x,y,l;
cin>>com;
scanf("%d %d %d",&x,&y,&l);
if(com == "WHITE")
{
for(int i = x;i <= x+l-1;i++)
{
for(int j = y;j <= y+l-1;j++)
board[i][j] = 0;
}
}
if(com == "BLACK")
{
for(int i = x;i <= x+l-1;i++)
{
for(int j = y;j <= y+l-1;j++)
board[i][j] = 1;
}
}
int num = 0;
if(com == "TEST")
{
for(int i = x;i <= x+l-1;i++)
{
for(int j = y;j <= y+l-1;j++)
{
if(board[i][j] == 1)
num++;
}
}
printf("%d\n",num);
}
}
}
}