位图像素的颜色
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 1 Accepted Submission(s) : 1
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
有一个在位图上画出矩形程序,一开始位图都被初始化为白色(RGB颜色表示为R=G=B=255)。该程序能够按照顺序绘出N个矩形。新绘制的矩形能够覆盖位图上原有的颜色。程序执行完毕后,需要查询M个点的颜色,输出这些点的RGB值。
每组数据都是在初始化后开始绘制。
每组数据都是在初始化后开始绘制。
Input
第一行包含参数N和M,分别表示矩形个数和需要查询的像素个数(1 ≤N, M≤ 1000 );
剩下N行每行包含7个参数x1, y1, x2, y2, r, g, b,表示绘制一个(x1,y1),(x2,y2)为顶点的矩形,填充颜色为RGB(r, g, b),其中x1≤x2, y1≤y2数据在整型范围;0≤ r,g,b ≤ 255;
最后M行分别包含参数X和Y,表示需要查询的像素位置。
如果某行N=M=0就表示输入结束。
剩下N行每行包含7个参数x1, y1, x2, y2, r, g, b,表示绘制一个(x1,y1),(x2,y2)为顶点的矩形,填充颜色为RGB(r, g, b),其中x1≤x2, y1≤y2数据在整型范围;0≤ r,g,b ≤ 255;
最后M行分别包含参数X和Y,表示需要查询的像素位置。
如果某行N=M=0就表示输入结束。
Output
对于每个用例,按行输出查询的像素的RGB值,每行包含3个整数,分别表示RGB值。
Sample Input
1 2 0 0 2 3 127 196 200 1 2 3 0 2 3 8 16 32 64 0 255 128 8 48 32 64 255 0 0 12 47 13 48 14 64 0 0
Sample Output
127 196 200 255 255 255 0 255 128 255 0 0 255 0 0
我们可以把n个矩形先存起来,因为后面的涂色会把前面的覆盖掉,所以对于n次询问,我只要找到最后一个包含这个点的矩形,并把它的像素输出就可以了。因为n和m的范围都是不超过1000的,所以n*m不会超时。
1 /* 2 ID: asif 3 LANG: C++ 4 TASK: test 5 */ 6 //# pragma comment(linker, "/STACK:102400000,102400000") 7 # include<iostream> 8 # include<cstdio> 9 # include<cstdlib> 10 # include<cstring> 11 # include<algorithm> 12 # include<cctype> 13 # include<cmath> 14 # include<string> 15 # include<set> 16 # include<map> 17 # include<stack> 18 # include<queue> 19 # include<vector> 20 # include<numeric> 21 using namespace std; 22 const int maxn=1011; 23 const double inf=0.000001; 24 const int INF=~0U>>1; 25 const int mod=1000000007; 26 # define PI (acos(0)*2.0) 27 # define lson l,m,rt<<1 28 # define rson m+1,r,rt<<1 | 1 29 # define PS printf(" ") 30 # define S(n) scanf("%d",&n) 31 # define P(n) printf("%d ",n) 32 # define Ps(n) printf(" %d",(n)) 33 # define SB(n) scanf("%lld",&n) 34 # define PB(n) printf("%lld ",n) 35 # define PBs(n) printf(" %lld",n) 36 # define SD(n) scanf("%lf",&n) 37 # define PD(n) printf("%.3lf ",n) 38 # define Sstr(s) scanf("%s",s) 39 # define Pstr(s) printf("%s ",s) 40 # define S0(a) memset(a,0,sizeof(a)) 41 # define S1(a) memset(a,-1,sizeof(a)) 42 typedef long long ll; 43 int n,m; 44 struct node 45 { 46 int x1; 47 int y1; 48 int x2; 49 int y2; 50 int r; 51 int g; 52 int b; 53 }; 54 node point[maxn]; 55 int equal(double x,double y) 56 { 57 if(x-y>=-inf&&x-y<=inf) 58 return 0; 59 else if(x-y>inf) 60 return 1; 61 return -1; 62 } 63 int main() 64 { 65 //freopen("input.in", "r", stdin); 66 //freopen("output.out", "w", stdout); 67 while(cin>>n>>m,n||m) 68 { 69 for(int i=0;i<n;i++) 70 scanf("%d%d%d%d%d%d%d",&point[i].x1,&point[i].y1,&point[i].x2,&point[i].y2,&point[i].r,&point[i].g,&point[i].b); 71 for(int i=0;i<m;i++) 72 { 73 int x,y; 74 S(x),S(y); 75 int r=255,g=255,b=255; 76 for(int j=0;j<n;j++) 77 { 78 if(x>=point[j].x1&&x<=point[j].x2&&y>=point[j].y1&&y<=point[j].y2) 79 { 80 r=point[j].r; 81 g=point[j].g; 82 b=point[j].b; 83 } 84 } 85 printf("%d %d %d ",r,g,b); 86 } 87 } 88 return 0; 89 }