P7027 [NWRRC2017] Intelligence in Perpendicularia 题解
题目大意
首先这道题,就是变相的给你一个图形,然后让你求“安全”的边是有多长。(一个单位长度的边是安全的当且仅当它向外平移后能与其余边相遇)。
“安全”的定义可以转化成:不被算在最外层的边的线,就是“安全”的线。
所以我们就可以用总周长减去不“安全”的长就行了。
时间复杂度分析:
code
#include<bits/stdc++.h>
#define INF 1e6
#define M 1005
using namespace std;
int n,m,k,jk,x2,y2,ans,sum,x[M],y[M];//y1会编译错误
int u=-INF,d=INF,l=INF,r=-INF;
void solve(int x,int y)
{
u=max(u,y);r=max(r,x);
d=min(d,y);l=min(l,x);
sum+=abs(x-x2)+abs(y-y2);
x2=x;y2=y;
}
int main()
{
scanf("%d%d%d",&n,&x[1],&y[1]);x2=x[1],y2=y[1];
for(register int i=2;i<=n;++i) scanf("%d%d",&x[i],&y[i]);
//输入部分 为了后面统一处理:
for(register int i=2;i<=n;++i) solve(x[i],y[i]);//处理
sum+=abs(x[1]-x2)+abs(y[1]-y2);//首尾相连
printf("%d",sum-(r-l+u-d)*2);//输出
return 0;}