ICPC 2017–2018, NEERC, Northern Subregional Contest St Petersburg, November 4, 2017 I题

 

 题意:给你一个封闭图形让你求在多边形里面的总周长是多少

题解:算出所有周长然后减去最外面的周长(卒~~~~~,我竟然还用半平面交瞎搞了一顿,真是太年轻,neerc名不虚传)

#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <vector>
#include <string>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define zero(a) fabs(a)<eps
#define max( x, y )  ( ((x) > (y)) ? (x) : (y) )
#define min( x, y )  ( ((x) < (y)) ? (x) : (y) )
#define lowbit(x) (x&(-x))
#define debug(a) cerr<<#a<<"=="<<a<<endl
typedef long long ll;
const double pi=acos(-1.0);
const double eps=1e-8;
const int inf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;
const int maxn = 1e3+5;
using namespace std;

struct point
{
    int x,y;
    point (){}
    point (int _x,int _y)
    {
        x=_x,y=_y;
    }
};
point p[maxn];

int main()
{
    int n;
    freopen("intel.in","r",stdin);
    freopen("intel.out","w",stdout);
    while(~scanf("%d",&n))
    {
        memset(p,0,sizeof(p));
        int t1,t2;
        for(int i=0;i<n;i++){
            scanf("%d%d",&t1,&t2);
            p[i]=point(t1,t2);
        }
        int sum=0;
        int l=inf,r=-inf,u=-inf,d=inf;
        for(int i=0;i<n;i++){
            if(p[i].x == p[(i+1)%n].x){
                sum += abs(p[i].y - p[(i+1)%n].y);
            }
            else if(p[i].y == p[(i+1)%n].y){
                sum += abs(p[i].x - p[(i+1)%n].x);
            }
            if(p[i].x < l) l = p[i].x;
            if(p[i].x > r) r = p[i].x;
            if(p[i].y < d) d = p[i].y;
            if(p[i].y > u) u = p[i].y;
        }
//        printf("test %d\n",sum);
//        printf("%d %d %d %d\n",l,r,u,d);
        printf("%d\n",sum-(r-l)*2-(u-d)*2);
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}
/*
10
1 1
6 1
6 4
3 4
3 3
5 3
5 2
2 2
2 3
1 3
*/

 

posted @ 2017-11-12 15:53  啦啦啦天啦噜  阅读(472)  评论(0编辑  收藏  举报