杭电2540--遮挡判断(数学题)

遮挡判断

Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 910    Accepted Submission(s):
295

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。

Source

UESTC
6th Programming Contest Online

Recommend

lcy   |   We have carefully selected several similar
problems for you:  2537 2539 2538 2546 2545

暴力判断一下。 前边木条高度减去当前木条高度再减去中间间隔所对应高度。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100001;

struct Posi{
    double x, y;
}Num[N];

bool cmp(Posi x, Posi y){
    return x.x < y.x;
}

int main(){
    int T;
    while(~scanf("%d", &T), T){
        for(int i = 0; i < T; i++)
            scanf("%lf%lf", &Num[i].x, &Num[i].y);
        double tana, tanb;
        scanf("%lf/%lf", &tana, &tanb);
        sort(Num, Num+T, cmp);     //按位置排一下序。
        double Max = Num[0].y;
        int sum = 0;
        for(int i = 1; i < T; i++){
            if(Max-Num[i].y-(Num[i].x-Num[i-1].x)*tana/tanb >= 0){  //更新Max值及计算被挡木条数目;
                sum++;
                Max = Max - (Num[i].x-Num[i-1].x)*tana/tanb;
            }
            else
                Max = Num[i].y;
        }
        printf("%d\n", T-sum);
    }
    return 0;
}
时间: 2024-08-06 05:51:53

杭电2540--遮挡判断(数学题)的相关文章

杭电1272 并查集找环+判断连通

杭电1272 并查集找环+判断连通 E - E Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1272 Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B

杭电1272~~小希的迷宫——并查集判断是否存在环

今天,刚学习了并查集对于并查集,也有了一定的理解了. 杭电1272这一题,主要是给你几对数,表示这两个数(可以理解为村落)直接有路,而从每一个村落到另外一个村落只能有一条路,也就是不能存在环.而并查集就是将有一定联系的村落组成一个部落(也就是集合),如果给的两个村落都存在于同一个部落,也就是存在环了. 还有一种情况就是存在两个部落,也就是有些村落到不了另一些村落.这一点,我们需要通过判断 顶点数减掉边数 是否等于,如果是,那就符合,不是,那就不符合. 也就是下面的情况: 这一题还有一个很坑的地方

杭电ACM分类

杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI

杭电ACM Java实现样例

若使用Java求解杭电ACM,答案提交必须注意两点: 1.类名一定得是Main,否则服务器无法编译: 2.必须用while进行输入判断. 以1000题测试题为例,代码如下: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); while(scan.hasNextInt()) { int a=scan.n

杭电ACM2092--整数解

杭电ACM2092--整数解    分析 http://acm.hdu.edu.cn/showproblem.php?pid=2092 一个YES,一个Yes.试了10几次..我也是无语了..哪里都不错的.... 很简单,用2次求根公式求出其中一个的值,然后判断是否为整数    if (x == int(x) ). 或者  用最直接的方法,从-m到m挨个算.有意结果时停止. 源码: #include <stdio.h> #include <math.h> int main() {

杭电 2553 N皇后问题

http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8077    Accepted Submission(s): 3603 Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不

魔咒词典------HDOJ杭电1880(字符串的处理,很简单)

Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词典.当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能:当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒.如果他要的魔咒不在词典中,就输出"what?" Input 首先列出词典中不超过100000条不同的魔咒词条,每条格式

A + B------HDOJ杭电1228(读取字符串练基础)

Problem Description 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. Input 测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出. Output 对每个测试用例输出1行,即A+B的值. Sample Input one + two = three four + five six = zero seven + eig