• codeforces 568 D Sign Posts


    codeforces 568 D Sign Posts

    http://blog.csdn.net/u013023344/article/details/47704549
    这题是搜索乱搞
    因为不是最小点的解
    设我们有L条直线 M 个点
    如果点数大于直线数 直接每个点对应一个直线就行了
    else 找到一个交点 该交点 覆盖了 x 个还没被覆盖的点
    然后将 边数-=x 点数-=1
    因为交点数量巨大
    所以我们随机 两条边的交点 看这个交点是否满足
    多次随机

     1 #include<cstdio>
     2 #include<ctime>
     3 #include<cstdlib>
     4 typedef long double lb;
     5 typedef long long ll;
     6 const int N=100100;
     7 const lb eps=1e-12;
     8 int i,j,k,n,m,nm,ch,ff;
     9 int p[N];
    10 struct cc { int a,b,c;} A[N];
    11 struct dd { int x,y;} ans[9];
    12 void R(int &x) {
    13     ff=x=0;ch=getchar();
    14     while (ch<'0' || '9'<ch) { if (ch=='-') ff=1;ch=getchar();}
    15     while ('0'<=ch && ch<='9') x=x*10+ch-'0',ch=getchar();
    16     if (ff) x=-x;
    17 }
    18 int Rand() {
    19     return rand()<<15|rand();
    20 }
    21 int main() {
    22     srand((int) time(0));
    23     R(n);R(m);
    24     for (i=1;i<=n;i++) R(A[i].a),R(A[i].b),R(A[i].c);
    25     for (i=1;i<=n;i++) p[i]=i;
    26     nm=n;
    27     for (i=1;i<=m && nm;i++) {
    28         int ma=0,t1,t2;
    29         for (j=1;j<=30;j++) {
    30             int x=Rand()%nm+1,y=Rand()%nm+1;
    31             if (x>y) {
    32                 int t=x;x=y;y=t;
    33             }
    34             x=p[x];y=p[y];
    35             if ((ll) A[x].a*A[y].b==(ll) A[y].a*A[x].b) {
    36                 if (1>ma) ma=1,t1=x,t2=-1;
    37                 continue;
    38             }
    39             lb X=((lb) A[y].c*A[x].b-(lb) A[x].c*A[y].b)/((lb) A[x].a*A[y].b-(lb) A[y].a*A[x].b);
    40             lb Y=((lb) A[y].c*A[x].a-(lb) A[x].c*A[y].a)/((lb) A[x].b*A[y].a-(lb) A[y].b*A[x].a);
    41             int cnt=0;
    42             for (k=1;k<=nm;k++) {
    43                 lb t=X*A[p[k]].a+Y*A[p[k]].b+A[p[k]].c;
    44                 if (-eps<t && t<eps) cnt++;
    45             }
    46             if (cnt>ma) {
    47                 ma=cnt;
    48                 t1=x;t2=y;
    49             }
    50         }
    51         ans[i].x=t1;ans[i].y=t2;
    52         if (t2==-1) {
    53             int tmp=nm;nm=0;
    54             for (j=1;j<=tmp;j++) if (p[j]!=t1) p[++nm]=p[j];
    55         }
    56         else {
    57             int x=t1,y=t2;
    58             lb X=((lb) A[y].c*A[x].b-(lb) A[x].c*A[y].b)/((lb) A[x].a*A[y].b-(lb) A[y].a*A[x].b);
    59             lb Y=((lb) A[y].c*A[x].a-(lb) A[x].c*A[y].a)/((lb) A[x].b*A[y].a-(lb) A[y].b*A[x].a);
    60             int tmp=nm;nm=0;
    61             for (k=1;k<=tmp;k++) {
    62                 lb t=X*A[p[k]].a+Y*A[p[k]].b+A[p[k]].c;
    63                 if (!(-eps<t && t<eps)) p[++nm]=p[k];
    64             }
    65         }
    66     }
    67     if (nm) return puts("NO"),0;
    68     puts("YES");
    69     printf("%d
    ",i-1);
    70     for (j=1;j<i;j++) printf("%d %d
    ",ans[j].x,ans[j].y);
    71 }
  • 相关阅读:
    mysql__视图
    mysql__索引的设计和使用
    mysql————表类型(存储引擎)的选择
    mysql 常用函数
    mysql中的运算符
    HTML5 API详解(1):fullscreen全屏模式
    深入了解 Flexbox 伸缩盒模型
    BAT及各大互联网公司2014前端笔试面试题--Html,Css篇
    js运动动画
    原创:自定义三叉树
  • 原文地址:https://www.cnblogs.com/third2333/p/7636560.html
Copyright © 2020-2023  润新知