• 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 */
  • 相关阅读:
    Codeforces Round #710 (Div. 3)
    Codeforces Round #708(Unrated on Div. 2)
    [JSOI2014]学生选课(二分+2-SAT)
    Educational Codeforces Round 103 (Rated for Div. 2)爆炸记
    AtCoder Beginner Contest 190
    GPU服务器centos7.4下安装jupyter后调用py文件以及调用失败的解决办法
    关于在centos7.4原来python2.7.5更新到python3.6或更高版本时注意事项
    Selenium初步应用
    CentOS利用docker安装MySQL5.7
    CentOS 常用命令
  • 原文地址:https://www.cnblogs.com/cmyg/p/9559438.html
Copyright © 2020-2023  润新知