您的位置:首页 > 其它

HDU 1264 Counting Squares(模拟)

2016-02-09 15:55 316 查看
题目链接

[align=left]Problem Description[/align]
Your input is a series of rectangles, one per line. Each rectangle is specified as two points(X,Y) that specify the opposite corners of a rectangle. All coordinates will be integers in the range 0 to 100. For example, the line
5 8 7 10
specifies the rectangle who's corners are(5,8),(7,8),(7,10),(5,10).
If drawn on graph paper, that rectangle would cover four squares. Your job is to count the number of unit(i.e.,1*1) squares that are covered by any one of the rectangles given as input. Any square covered by more than one rectangle should only be counted once.

[align=left]Input[/align]
The input format is a series of lines, each containing 4 integers. Four -1's are used to separate problems, and four -2's are used to end the last problem. Otherwise, the numbers are the x-ycoordinates of two points that are opposite corners of a rectangle.

[align=left]Output[/align]
Your output should be the number of squares covered by each set of rectangles. Each number should be printed on a separate line.

[align=left]Sample Input[/align]

5 8 7 10

6 9 7 8

6 8 8 11

-1 -1 -1 -1

0 0 100 100

50 75 12 90

39 42 57 73

-2 -2 -2 -2

[align=left]Sample Output[/align]

8
10000
题解:水题,因为数字范围不大,可以用二维数组保存每个1x1的块是否被访问过。

#include <cstdio>
#include <iostream>
#include <string>
#include <sstream>
#include <cstring>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
#define PI acos(-1.0)
#define ms(a) memset(a,0,sizeof(a))
#define msp memset(mp,0,sizeof(mp))
#define msv memset(vis,0,sizeof(vis))
using namespace std;
//#define LOCAL
int mp[120][120];
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
ios::sync_with_stdio(false);
int x1,y1,x2,y2;
int cnt=0;
msp;
while(cin>>x1>>y1>>x2>>y2)
{
if(x1==-1){printf("%d\n",cnt);
msp,cnt=0;}
if(x1==-2){
printf("%d\n",cnt);break;}
if(x1>x2)swap(x1,x2);
if(y1>y2)swap(y1,y2);
for(int i=x1;i<x2;i++)
for(int j=y1;j<y2;j++)
if(mp[i][j])continue;
else {cnt++,mp[i][j]=1;}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: