• hdu 2540 遮挡判断(数论+计算几何)


    http://acm.hdu.edu.cn/showproblem.php?pid=2540

    Problem Description
    在一个广场上有一排沿着东西方向排列的石柱子,阳光从东边以一定的倾角射来(平行光)。有的柱子可能被在他东边的高大的柱子的影子给完全遮挡住了。现在你要解决的问题是求出有多少柱子是没有被完全遮挡住的。
    假设每个石柱子是一根细棒,而且都垂直于地面摆放。
     
    Input
    输入包含多组数据。每组数据第一行是一个整数N(0<N<=100000),表示柱子的个数。N=0代表输入结束。接下来有N行,每行是两个整数,分别给出每根柱子的水平位置X和高度H(X越大,表示越在西边,0<=X<=10000000,0<H<=10000000保证不会有两根柱子在同一个X坐标上)。最后有一行,以分数的形式给出太阳光与地面的夹角的正切值T/A(1<=A,T<=10)。
     
    Output
    对每组数据,输出包含所求数目的一行。
     
    Sample Input
    4 0 3 3 1 2 2 1 1 1/1 0
     
    Sample Output
    2 提示:输入数据很多,请用scanf代替cin。
     
    代码:
     1 include<iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<algorithm>
     5 using namespace std;
     6 struct nod
     7 {
     8     double x,h,c;
     9 }node[100010];
    10 int comp(nod a,nod b){return a.x<b.x;}
    11 int main()
    12 {
    13     int n;
    14     while(~scanf("%d",&n),n)
    15     {
    16         bool mark[100010]={0};
    17         int i;
    18         double t,a;
    19         for(i=1;i<=n;i++)
    20             scanf("%lf%lf",&node[i].x,&node[i].h);
    21         scanf("%lf/%lf",&t,&a);
    22         for(i=1;i<=n;i++)
    23             node[i].c=node[i].h*a/t+node[i].x;
    24         sort(node+1,node+1+n,comp);
    25         int num=0,max=0;
    26         for(i=1;i<=n;i++)
    27         {
    28             if(!mark[i])
    29             {
    30                 if(max<node[i].c)
    31                 {
    32                     max=node[i].c;
    33                     num++;
    34                 }
    35             }
    36         }
    37         printf("%d\n",num);
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    Hbase JavaApi
    面向对象特征之继承
    重写(Override)与重载(Overload)
    数组排序
    EL表达式
    java异常
    业务代码与非业务代码
    设计思想之高内聚低耦合
    JDBC实现动态查询
    枚举
  • 原文地址:https://www.cnblogs.com/crazyapple/p/2649933.html
Copyright © 2020-2023  润新知