zoukankan      html  css  js  c++  java
  • POJ 2653 Pick-up sticks

    题意:
    n个棍子,一个一个扔,如果扔在了别的棍子上,也就是说和别的棍子相交了,那么和它相交的棍子就会消失, 求最后剩下的棍子的编号
     

     输入 
     输入由若干个案例组成。每种情况下的数据以1<n<= 100000,本例的数量为开始。下面的n行各包含四个数字,这些数字是一个端点端点的平面坐标。木棍是按照Stan扔的  顺序排列的。你可以假设顶端不超过1000根。输入以n=0的情况结束。此案件不应处理。
     输出
     对于每一个输入案例,打印一行输出,列出示例中给出的格式的顶部分支。顶部的木棒应该按照它们的顺序排列。
     右下方的图片说明了输入的第一个例子。

    Sample Input

    5
    1 1 4 2
    2 3 3 1
    1 -2.0 8 4
    1 4 8 2
    3 3 6 -2.0
    3
    0 0 1 1
    1 0 2 1
    2 0 3 1
    0

    Sample Output

    Top sticks: 2, 4, 5.
    Top sticks: 1, 2, 3. 
    题解:
    倒着检查

    选定一个木棍,将他与后面的木棍比较,相交则退出,如果一直未退出,则保留
    虽然数据是100000,但最后留下的不超过1000,所以只有1000根会全部遍历
    虽是O(n^2)但非常快
     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<cmath>
     6 using namespace std;
     7 double x1[100001],x2[100001],y11[100001],y2[100001];
     8 int n;
     9 bool exam(int i,int j)
    10 {
    11     double dx=x1[i]-x1[j],dy=y11[i]-y11[j];
    12     double px=x2[j]-x1[j],py=y2[j]-y11[j];
    13     double fx=x2[i]-x1[j],fy=y2[i]-y11[j];
    14     if ((dx*py-dy*px)*(px*fy-py*fx)<0) return 0;
    15      dx=x1[j]-x1[i],dy=y11[j]-y11[i];
    16      px=x2[i]-x1[i],py=y2[i]-y11[i];
    17      fx=x2[j]-x1[i],fy=y2[j]-y11[i];
    18     if ((dx*py-dy*px)*(px*fy-py*fx)<0) return 0;
    19    return 1;
    20 }
    21 int main()
    22 {int i,j;
    23     while (cin>>n&&n)
    24     {
    25         for (i=1;i<=n;i++)
    26         {
    27             scanf("%lf%lf%lf%lf",&x1[i],&y11[i],&x2[i],&y2[i]);
    28         }
    29         cout<<"Top sticks: ";
    30         for (i=1;i<n;i++)
    31         {
    32             for (j=i+1;j<=n;j++)
    33             {
    34                 if (exam(i,j))
    35                  break;
    36             }
    37           if (j==n+1) 
    38           printf("%d, ",i);
    39         }
    40     printf("%d.
    ",n);
    41     }
    42 }
    
    
    
     
  • 相关阅读:
    配置ssl(阿里云+腾讯云)
    使用Nativefier将web页面打包为桌面应用
    临时切换淘宝源下载包
    ajax实现异步上传多图并且预览
    通过phpexcel插件导出报表功能实现
    ThinkPHP5.0自定义命令行的使用
    Longest Substring Without Repeating Characters
    计算机操作系统巡回置换算法
    HDU 2041 DP
    HDU 2044 DP (fibonacci)
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7268262.html
Copyright © 2011-2022 走看看