[Codeforces50C]Happy Farm 5 凸包

來源:互聯網
上載者:User

標籤:pair   ems   arm   stdin   efi   play   1.0   display   要求   

大致題意:

  平面上有n個整數點,問你最少經過多少步能夠將所有點嚴格包圍。

  將點嚴格包圍要求你走的路徑完全包圍給出的點且不能有點在路徑上

  你只能走整數點,且方向只有上下左右左上右下等8個方向,每次移動一格。

 

答案

  先對點構造凸包,答案即為每條邊 max(abs(x1-x2),abs(y1-y2))的累加和+4;

  

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<queue>#include<set>#include<map>#include<stack>#include<time.h>#include<cstdlib>#include<cmath>#include<list>using namespace std;#define MAXN 100100#define eps 1e-9#define For(i,a,b) for(int i=a;i<=b;i++) #define Fore(i,a,b) for(int i=a;i>=b;i--) #define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define mkp make_pair#define pb push_back#define cr clear()#define sz size()#define met(a,b) memset(a,b,sizeof(a))#define iossy ios::sync_with_stdio(false)#define fre freopen#define pi acos(-1.0)#define inf 1e6+7#define Vector Pointconst int Mod=1e9+7;typedef unsigned long long ull;typedef long long ll;int dcmp(double x){    if(fabs(x)<=eps) return 0;    return x<0?-1:1;}struct Point{    double x,y;    Point(double x=0,double y=0):x(x),y(y) {}    bool operator < (const Point &a)const{        if(x==a.x) return y<a.y;        return x<a.x;    }    Point operator - (const Point &a)const{        return Point(x-a.x,y-a.y);    }    Point operator + (const Point &a)const{        return Point(x+a.x,y+a.y);    }    Point operator * (const double &a)const{        return Point(x*a,y*a);    }    Point operator / (const double &a)const{        return Point(x/a,y/a);    }    void read(){        scanf("%lf%lf",&x,&y);    }    void out(){        cout<<"debug: "<<x<<" "<<y<<endl;    }    bool operator == (const Point &a)const{        return dcmp(x-a.x)==0 && dcmp(y-a.y)==0;    }};double Dot(Vector a,Vector b) {    return a.x*b.x+a.y*b.y;}double dis(Vector a) {    return sqrt(Dot(a,a));}double Cross(Point a,Point b){    return a.x*b.y-a.y*b.x;}int ConvexHull(Point *p,int n,Point *ch){    int m=0;    For(i,0,n-1) {        while(m>1 && Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--;        ch[m++]=p[i];    }    int k=m;    Fore(i,n-2,0){        while(m>k && Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--;        ch[m++]=p[i];    }    if(n>1) m--;    return m;}bool cmp(Point a,Point b){    return a.y<b.y;}int n,m;Point p[100005];Point ch[100005];void solve(){    cin>>n;    int ans=0;    For(i,0,n-1) p[i].read();    sort(p,p+n);    m=ConvexHull(p,n,ch);    For(i,0,m-1) {        Point tp=ch[(i+1)%m]-ch[i];        ans+=max(abs(tp.x),abs(tp.y));    }    cout<<ans+4<<endl;}int main(){//    fre("in.txt","r",stdin);    int t=0;    solve();    return 0;}
View Code

 

[Codeforces50C]Happy Farm 5 凸包

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.