题目大意:
一个平面片放置着许多幻灯片,幻灯片上有不同的颜色,不同的样色放在一起会产生不同的颜色,让你统计所有的颜色。
输入
输入第一行为一个整数N(1<=N<=100),N为平面上幻灯片的数量。接下来N行每行5个整数X1, Y1, X2, Y2, C,X1<X2,Y1<Y2,1<=C<=100,描述了一张幻灯片的情况,(X1,Y1)为左下角坐标,(X2,Y2)为右上角坐标,C为幻灯片颜色值。
输出
输出一个整数,为平面上出现的不同颜色的数量。
样例输入
3
2 2 3 3 2
2 0 4 4 1
1 1 3 5 3
样例输出
4
数据范围限制
提示
数据说明:
对于50%的数据,0<=X1,Y1,X2,Y2<=10^2。
对于100%的数据,0<=X1,Y1,X2,Y2<=10^9。
(50分)思路:
暴力模拟即可,但这样会使你有一些数据过不去。
代码:
#include<cstdio>
#include<iostream>
#define rr register
using namespace std;
long long n,X1,X2,Y1,Y2,c;
long long a[5005][5005],sum,dx[2],dy[2];
bool b[5005];
int main()
{
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
dx[0]=dx[1]=dy[0]=dy[1]=1;//预处理。
scanf("%lld",&n);//输入。
for (int i=1;i<=n;++i)
{
scanf("%lld%lld%lld%lld%lld",&X1,&Y1,&X2,&Y2,&c);//输入。
for (rr int j=X1;j<X2;++j)//for一下整个平面
for (rr int k=Y1;k<Y2;++k)
a[j][k]+=c;
dx[0]=min(dx[0],X1); dx[1]=max(dx[1],X2);//暴力。
dy[0]=min(dy[0],Y1); dy[1]=max(dy[1],Y2);
}
for (rr int i=dx[0];i<=dx[1];++i)
for (rr int j=dy[0];j<=dy[1];++j)
{
if (b[a[i][j]]==false&&a[i][j]!=0) {
b[a[i][j]]=1;//标记为true
sum++;//统计颜色。
}
}
printf("%lld",sum);//输出。
return 0;
}