携程第二场预赛 1003:位图像素的颜色(水题,判断点是否在矩形内)
位图像素的颜色
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 4 Accepted Submission(s) : 4
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
Source
CodingTrip - 携程编程大赛 (预赛第二场)
水题,稍微沾了一点计算几何的边。
这道题用20分钟就能做出来,我却做了30分钟,一开始觉得要用到判断点是否在多边形内,所以直接套上了一个大模板,后来发现根本不用那么复杂,判断点是否在矩形内直接判断点的上界下界是否超出就行了。
比赛就要看手速啊!早知道这道题这么简单怎么说也能杀入决赛了!
代码:
1 #include <iostream>
2 using namespace std;
3 struct Point{
4 double x,y;
5 };
6 struct Plg{
7 Point p1,p2;
8 int r,g,b;
9 };
10 int main()
11 {
12 int n,m;
13 while(scanf("%d%d",&n,&m)!=EOF){
14 if(n==0 && m==0) break;
15 Plg pl[1010]; //多边形
16 int i,j;
17 for(i=1;i<=n;i++) //输入多边形及颜色
18 scanf("%lf%lf%lf%lf%d%d%d",&pl[i].p1.x,&pl[i].p1.y,&pl[i].p2.x,&pl[i].p2.y,&pl[i].r,&pl[i].g,&pl[i].b);
19 for(i=1;i<=m;i++){
20 Point t;
21 scanf("%lf%lf",&t.x,&t.y);
22 int r=255,b=255,g=255;
23 for(j=1;j<=n;j++){
24 if(pl[j].p1.x<=t.x && t.x<=pl[j].p2.x &&
25 pl[j].p1.y<=t.y && t.y<=pl[j].p2.y){ //在多边形内,刷新颜色
26 r = pl[j].r;
27 b = pl[j].b;
28 g = pl[j].g;
29 }
30 }
31 printf("%d %d %d\n",r,g,b);
32 }
33 }
34 return 0;
35 }
Freecode : www.cnblogs.com/yym2013