zoukankan      html  css  js  c++  java
  • E. The Supersonic Rocket Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)

    http://codeforces.com/contest/1017/problem/E

    凸包模板+kmp

      1 #include <cstdio>
      2 #include <cstdlib>
      3 #include <cmath>
      4 #include <cstring>
      5 #include <time.h>
      6 #include <string>
      7 #include <set>
      8 #include <map>
      9 #include <list>
     10 #include <stack>
     11 #include <queue>
     12 #include <vector>
     13 #include <bitset>
     14 #include <ext/rope>
     15 #include <algorithm>
     16 #include <iostream>
     17 using namespace std;
     18 #define ll long long
     19 #define minv 1e-10
     20 #define inf 1e9
     21 #define pi 3.1415926536
     22 #define E  2.7182818284
     23 const ll mod=1e9+7;//998244353
     24 const int maxn=1e5+10;
     25 
     26 struct node
     27 {
     28     ll x,y;
     29 }a[maxn],b[maxn],e[maxn],f[maxn],point;
     30 
     31 int p[maxn*6];
     32 double c[maxn*6],d[maxn*6];
     33 
     34 ///result only 1/0
     35 int cmp(node a,node b)
     36 {
     37     ll s=(a.y-point.y)*(b.x-point.x) - (b.y-point.y)*(a.x-point.x);
     38     if (s<0)
     39         return 1;
     40     else if (s>0)
     41         return 0;
     42     else
     43         return pow(a.y-point.y,2)+pow(a.x-point.x,2) < pow(b.y-point.y,2)+pow(b.x-point.x,2);
     44 }
     45 
     46 void work(node a[],double c[],node e[],int n,int* z)
     47 {
     48     int i,g;
     49     for (i=1;i<=n;i++)
     50     {
     51         scanf("%lld%lld",&a[i].x,&a[i].y);
     52         if (a[1].x>a[i].x || (a[1].x==a[i].x && a[1].y>a[i].y))
     53             swap(a[i],a[1]);
     54     }
     55     point=a[1];
     56     sort(a+2,a+n+1,cmp);
     57 
     58     e[1].x=a[1].x,e[1].y=a[1].y;
     59     e[2].x=a[2].x,e[2].y=a[2].y;
     60     g=2;
     61     for (i=3;i<=n;i++)
     62     {
     63         while (g>1 && (a[i].x-e[g-1].x)*(e[g].y-e[g-1].y)-(e[g].x-e[g-1].x)*(a[i].y-e[g-1].y)>=0)
     64             g--;
     65         g++;
     66         e[g].x=a[i].x,e[g].y=a[i].y;
     67     }
     68     e[g+1]=e[1];
     69     e[0]=e[g];
     70 
     71     for (i=1;i<=g;i++)
     72     {
     73         //len^2 cos(angle)
     74         c[i*2-1]=(double)(pow(e[i+1].x-e[i].x,2) + pow(e[i+1].y-e[i].y,2));
     75 
     76         ll b1=pow(e[i+1].y-e[i].y,2)+pow(e[i+1].x-e[i].x,2),
     77         b2=pow(e[i-1].y-e[i].y,2)+pow(e[i-1].x-e[i].x,2),
     78         b3=pow(e[i+1].y-e[i-1].y,2)+pow(e[i+1].x-e[i-1].x,2);
     79 
     80         c[i*2]=1.0*(b1+b2-b3)/2/sqrt(b1)/sqrt(b2);
     81     }
     82     (*z)=g*2;
     83 }
     84 
     85 int main()
     86 {
     87     int n,m,g1,g2,i,j;
     88     scanf("%d%d",&n,&m);
     89     work(a,c,e,n,&g1);
     90     work(b,d,f,m,&g2);
     91     if (g1!=g2)
     92     {
     93         printf("NO");
     94         return 0;
     95     }
     96     for (i=1;i<=g2;i++)
     97         d[i+g2]=d[i];
     98     g2<<=1;
     99 
    100     p[1]=0;
    101     j=0;
    102     for (i=2;i<=g1;i++)
    103     {
    104         while (j>0 && fabs(c[j+1]-c[i])>minv)
    105             j=p[j];
    106         if (fabs(c[j+1]-c[i])<minv)
    107             j++;
    108         p[i]=j;
    109     }
    110 
    111     j=0;
    112     for (i=1;i<=g2;i++)
    113     {
    114         while (j>0 && fabs(c[j+1]-d[i])>minv)
    115             j=p[j];
    116         if (fabs(c[j+1]-d[i])<minv)
    117             j++;
    118         if (j==g1)
    119         {
    120             printf("YES");
    121             return 0;
    122         }
    123     }
    124     printf("NO");
    125     return 0;
    126 }
    127 /*
    128 6 5
    129 1 100000000
    130 2 100000000
    131 3 100000000
    132 4 100000000
    133 5 100000000
    134 6 1
    135 
    136 2 100000000
    137 6 1
    138 3 100000000
    139 1 100000000
    140 5 100000000
    141 */
  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/cmyg/p/9559438.html
Copyright © 2011-2022 走看看