作为萌新一枚,这道题还是需要巧解的----感谢某位大佬给予我的帮助
Submit[Web Board]
Description
n张矩形纸片叠在一起,偶数张叠加的区域会消去,奇数张叠加的区域会保留,求最后
保留的区域的总面积。矩形的边平行于坐标轴。
Input
多组输入,每组格式如下:
第一行1个整数n。
接下来n行,每行4个整数x1, y1, x2, y2。( x1, y1)为矩形左下顶点位置,( x2,
y2)为矩形右上顶点位置。
数据范围:测试组数不超过10; 1<= n <= 100; -50 <= x1 < x2 <= 50; -50 <=
y1 < y2 <= 50;
Output
每组输出一行,一个整数,表示最后保留的区域的总面积。
Sample Input
2
-2 -1 2 1
-1 -2 1 2
3
1 1 6 3
2 1 4 5
3 2 5 4
Sample Output
8
10
题目已经说出了个位数的大小范围,我们要用一个填二维数组的方法来解决这道问题
即把矩形先平移100个单位(只要平移到正数即可)然后,在用一个二维数组模拟这个操作,最后将奇数个就每个赋值为1,偶数个就变为0(前提初始化为0)
ACcode
#include <stdio.h>
#include <string.h>
#include <math.h>
int a[210][210];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j,x1,y1,x2,y2;
memset(a,0,sizeof(a));
while(n--)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1+=100;
y1+=100;
x2+=100;
y2+=100;
for(i=x1; i<x2; i++)
{
for(j=y1; j<y2; j++)
{
if(a[i][j]==0)
{
a[i][j]=1;
}
else if(a[i][j]==1)
{
a[i][j]=0;
}
}
}
}
int sum=0;
for(i=0; i<=200; i++)
{
for(j=0; j<=200; j++)
{
sum+=a[i][j];
}
}
printf("%d\n",sum);
}
return 0;
}
那么这样那道题就迎刃而解了,biu~~.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。