!
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给出一个n*n的矩阵,矩阵中只有0和1,现在有两种操作:
1 x y 将第x行第y列的数字改变(0变1,1变0)
2 x1 y1 x2 y2求由左上角(x1,y1)到右下角(x2,y2)组成的矩形中的1的个数。
现在初始的矩阵全是0,之后有一系列操作。保证数据输入合法。
输入
第一行输入一个正整数T,代表测试组数。(T <= 10)
每组测试数据的第一行有两个数n,m。(1 <= n <= 500 , 1 <= m <= 10000)
之后是连续m行,代表m次操作。(1 <= x1,y1 <= x2,y2 <= n)
输出
对每次询问输出(x1,y1)到(x2,y2)矩形内的1的个数
示例输入
1 3 3 1 2 2 1 1 1 2 1 1 3 3
示例输出
2
提示
来源
windream
示例程序
#include<stdio.h>
#include<string.h>
int a[600][600];
int main()
{
int i,j,n,m,k,t,x,y,x1,x2,y1,y2,l1,l2,b;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d",&k);
if(k==1)
{
scanf("%d %d",&x,&y);
if(a[x][y])
a[x][y]=0;
else
a[x][y]=1;
}
if(k==2)
{
b=0;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
for(l1=x1;l1<=x2;l1++)
for(l2=y1;l2<=y2;l2++)
if(a[l1][l2])
b++;
printf("%d\n",b);
}
}
}
}