题意:给你一个封闭图形让你求在多边形里面的总周长是多少
题解:算出所有周长然后减去最外面的周长(卒~~~~~,我竟然还用半平面交瞎搞了一顿,真是太年轻,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 ",sum); // printf("%d %d %d %d ",l,r,u,d); printf("%d ",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 */