-
E - Friends and Berries
URAL - 2067 - 题意:抽象成图模型之后就是 给出一些x,y坐标求出这种合法组的个数 p(u,v)
- p( v, u) = sqrt(( s v − su) 2 + ( r v − r u) 2)
- p( v, u, w) = ( p( v, u) + p( v, w) + p( u, w)) / 2, p( v, u) ≥ p(v, u, w) for every child w.
- 思路 :合法情况只有所有点共线并且 合法点为线段端点
-
#include<stdio.h> #include<algorithm> using namespace std; #define maxn 223456 double ord,aa,bb; struct node { double x,y; int id; } a[maxn]; int n,ans; bool cmp(node c,node d) { return c.x<d.x; } bool cpm(node c,node d) { return c.y<d.y; } int main() { bool flag=0,ol=0,ok=0; scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%lf%lf",&a[i].x,&a[i].y); a[i].id=i; if(i==1) { aa=a[i].x; bb=a[i].y; } else { if(a[i].x!=aa)ol=1; if(a[i].y!=bb)ok=1; } } if(ok==0) { sort(a+1,a+1+n,cmp); printf("1\n"); printf("%d %d\n",a[1].id,a[n].id); } else if(ol==0) { sort(a+1,a+1+n,cpm); printf("1\n"); printf("%d %d\n",a[1].id,a[n].id); } else { if((a[2].x-a[1].x)==0) flag=1; else { ord=(a[2].y-a[1].y)/(a[2].x-a[1].x); for(int i=3; i<=n; i++) { if(a[i-1].x==a[i].x) { flag=1; break; } if(ord!=(a[i].y-a[i-1].y)/(a[i].x-a[i-1].x)) { flag=1; break; } } } if(flag)printf("0\n"); else { sort(a+1,a+1+n,cmp); printf("1\n"); printf("%d %d\n",a[1].id,a[n].id); } } return 0; }
E - Friends and Berries URAL - 2067-几何-思维
最新推荐文章于 2019-01-05 21:24:14 发布