码迷,mamicode.com
首页 > 其他好文 > 详细

Area of Mushroom HDU - 4946

时间:2017-08-17 14:42:43      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:题意   bool   i++   bre   hdu   tor   while   gif   img   

Area of Mushroom

 HDU - 4946

题意:

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <cmath>
 6 using namespace std;
 7 
 8 const int maxn=510;
 9 char res[maxn];
10 struct Node{
11     int x,y,v;
12     int vis;
13     int id;
14     Node(){}
15     Node(int x,int y):x(x),y(y){}
16     bool operator < (const Node& a)const {
17        if(v==a.v) return x<a.x||x==a.x&&y<a.y;
18        return v>a.v;
19     }
20     Node operator - (const Node& a){
21         return Node(x-a.x,y-a.y);
22     }
23     bool operator == (Node a){
24         return x==a.x&&y==a.y;
25     }
26 }p[maxn],mv[maxn],convex[maxn];
27 
28 int cross(Node a,Node b){
29     return a.x*b.y-a.y*b.x;
30 }
31 int ConvexHull(int n){
32     int m=0;
33     for(int i=0;i<n;i++){
34         while(m>1&&cross(convex[m-1]-convex[m-2],mv[i]-convex[m-2])<0) m--;
35         convex[m++]=mv[i];
36     }
37     int k=m;
38     for(int i=n-2;i>=0;i--){
39         while(m>k&&cross(convex[m-1]-convex[m-2],mv[i]-convex[m-2])<0) m--;
40         convex[m++]=mv[i];
41     }
42     if(n>1)m--;
43     return m;
44 }
45 int main(){
46     int n,maxv,kase=0;
47     while(scanf("%d",&n)&&n){
48         maxv=0;
49         for(int i=0;i<n;i++) {
50             scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].v);
51             maxv=max(maxv,p[i].v);
52             p[i].vis=0;
53             p[i].id=i;
54             res[i]=0;
55         }
56         res[n]=\0;
57         if(maxv==0){
58             printf("Case #%d: %s\n",++kase,res);
59             continue;
60         }
61         sort(p,p+n);
62         int cnt=0;
63         for(int i=0;i<n;){
64             if(p[i].v!=maxv) break;
65             int r=1;
66             while(i+r<n&&p[i]==p[i+r]) {
67                 if(maxv!=p[i+r].v) break;
68                 r++;
69             }
70             mv[cnt]=p[i];
71             if(r>1) mv[cnt].vis=1; //重点!
72             cnt++;
73             i+=r;
74         }
75         int num=ConvexHull(cnt);
76         for(int i=0;i<num;i++){
77             if(convex[i].vis==0) res[convex[i].id]=1;
78         }
79          printf("Case #%d: %s\n",++kase,res);
80     }
81     return 0;
82 }
View Code

 

Area of Mushroom HDU - 4946

标签:题意   bool   i++   bre   hdu   tor   while   gif   img   

原文地址:http://www.cnblogs.com/yijiull/p/7380955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!