• Area of Mushroom HDU


    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]='';
    57         if(maxv==0){
    58             printf("Case #%d: %s
    ",++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
    ",++kase,res);
    80     }
    81     return 0;
    82 }
    View Code
  • 相关阅读:
    常用颜色
    在VS2010中打开VS2012的项目
    vs2012 断点不能调试
    Setup Factory 打包.netframework 2.0
    Access 中数据库操作时提示from子句语法错误
    vs2012 .netFramwork2.0发布到xp
    c# access插入null值
    Visual Studio安装卸载模板
    Codeforces 455D
    ACdream 1157 (cdq分治)
  • 原文地址:https://www.cnblogs.com/yijiull/p/7380955.html
Copyright © 2020-2023  润新知