POJ1656 计算黑格
有一个100*100的方格(左上角为(1,1)格子,右下角为(100,100)格子),初始全为白格子,且有三种命令:
WHITE x y l 表以(x,y)为左上角的长宽为l的正方形全涂白,
BLACK x y l 表以(x,y)为左上角的长宽为l的正方形全涂黑,
TEST x y l 表计算(x,y)为左上角的长宽为l的正方形中有多少个小黑格。
输入:第一行一个T,表以下有T行,每行一条命令,但是只有遇到TEST命令才用输出
输出:对于每条TEST命令输出小黑格的个数
解:本题数据简单,命令都合法,而且数据规模很小,直接模拟就行了。
代码:
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=110;
int a[maxn][maxn];
int main()
{
char s[100];
intn;
memset(a ,0,sizeof(a));
scanf("%d",&n);
intx,y,l;
while(n--)
{
scanf("%s%d%d%d",s,&x,&y,&l);
int sign;
if(s[0]=='B')sign=1;
else if(s[0]=='W')sign=0;
if(s[0]!='T')
for(int i=x; i<=x+l-1; i++)
{
for(int j=y; j<=y+l-1; j++)
{
a[i][j]=sign;
}
}
else
{ int num=0;
for(int i=x; i<=x+l-1; i++)
{
for(int j=y; j<=y+l-1; j++)
{
if(a[i][j]==1)num++;
}
}
printf("%d\n",num);
}
}
return 0;
}