USACO 5.3 Window Area(模拟)

坐标不全是左上角,右下角的。2Y,怎么可以写的这么麻烦。。。暴力水过。

  1 /*
  2 ID: cuizhe
  3 LANG: C++
  4 TASK: window
  5 */
  6 #include <iostream>
  7 #include <cstdio>
  8 #include <cstring>
  9 #include <cmath>
 10 #include <algorithm>
 11 #include <vector>
 12 #include <string>
 13 #include <queue>
 14 #include <set>
 15 using namespace std;
 16 #define INF 10000000
 17 struct node
 18 {
 19     int x1,y1,x2,y2;
 20 }p[201];
 21 int o[201];
 22 void add(int num,int x1,int y1,int x2,int y2)
 23 {
 24     p[num].x1 = min(x1,x2);
 25     p[num].y1 = max(y1,y2);
 26     p[num].x2 = max(x1,x2);
 27     p[num].y2 = min(y1,y2);
 28 }
 29 int judge(int num,int x1,int y1,int x2,int y2)
 30 {
 31     if(p[num].x1 <= x1&&p[num].y1 >= y1&&x2 <= p[num].x2&&y2 >= p[num].y2)
 32     return 1;
 33     else
 34     return 0;
 35 }
 36 int main()
 37 {
 38     char ch,na;
 39     int i,x1,x2,y1,y2,t,num,bot;
 40     num = 1;bot = 0;
 41     freopen("window.in","r",stdin);
 42     freopen("window.out","w",stdout);
 43     for(i = 0;i <= 200;i ++)
 44     o[i] = -INF;
 45     while(scanf("%c",&ch)!=EOF)
 46     {
 47         if(ch == 'w')
 48         {
 49             scanf("(%c,%d,%d,%d,%d)%*c",&na,&x1,&y1,&x2,&y2);
 50             t = na;
 51             add(t,x1,y1,x2,y2);
 52             o[t] = num ++;
 53         }
 54         else if(ch == 'd')
 55         {
 56             scanf("(%c)%*c",&na);
 57             o[na] = -INF;
 58         }
 59         else if(ch == 't')
 60         {
 61             scanf("(%c)%*c",&na);
 62             o[na] = num ++;
 63         }
 64         else if(ch == 'b')
 65         {
 66             scanf("(%c)%*c",&na);
 67             o[na] = bot--;
 68         }
 69         else if(ch == 's')
 70         {
 71             scanf("(%c)%*c",&na);
 72             set<int> r;
 73             set<int> c;
 74             set<int>::iterator it1;
 75             set<int>::iterator it2;
 76             set<int>::iterator te;
 77             for(i = 0;i <= 130;i ++)
 78             {
 79                 if(o[i] >= o[na])
 80                 {
 81                     r.insert(p[i].x1);
 82                     r.insert(p[i].x2);
 83                     c.insert(p[i].y1);
 84                     c.insert(p[i].y2);
 85                 }
 86             }
 87             int temp1,temp2,sum;
 88             sum = 0;
 89             for(it1 = r.begin();it1 != r.end();it1 ++)
 90             {
 91                 te = ++ it1;
 92                 temp1 = *te;
 93                 it1 --;
 94                 if(te == r.end()) break;
 95 
 96                 for(it2 = c.begin();it2 != c.end();it2 ++)
 97                 {
 98                     te = ++it2;
 99                     temp2 = *te;
100                     it2 --;
101                     if(te == c.end()) break;
102                     if(judge(na,*it1,temp2,temp1,*it2))
103                     {
104                         for(i = 0;i <= 128;i ++)
105                         {
106                             if(o[i] > o[na])
107                             {
108                                 if(judge(i,*it1,temp2,temp1,*it2))
109                                 break;
110                             }
111                         }
112                         if(i != 129)
113                         {
114                             sum += (temp1 - *it1)*(temp2 - *it2);
115                         }
116                     }
117                 }
118             }
119             sum = (p[na].x2-p[na].x1)*(p[na].y1-p[na].y2) - sum;
120             printf("%.3lf\n",sum*100.0/(p[na].x2-p[na].x1)/(p[na].y1-p[na].y2));
121         }
122     }
123     return 0;
124 }

 

转载于:https://www.cnblogs.com/naix-x/archive/2013/05/27/3101141.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值