Area of Mushroom HDU - 4946
Posted yijiull
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Area of Mushroom HDU - 4946相关的知识,希望对你有一定的参考价值。
Area of Mushroom
题意:
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 }
以上是关于Area of Mushroom HDU - 4946的主要内容,如果未能解决你的问题,请参考以下文章