CDOJ 26 遮挡判断(shadow) 解题报告

题目链接http://acm.uestc.edu.cn/#/problem/show/26

出题目的给我说清东边是哪一边啊魂淡!

分析样例可得,东边是先读入数据的那一边。

这题主要考察排序,然而感谢上苍我有<algorithm>

另外,CDOJ是可以用C++11标准的匿名函数的,所以sort的比较函数我就打了匿名的

这题只要记录一下扫到的柱子中投影最西边最靠西的那根,不妨设为柱子h

如果这根柱子h能完全遮住当前扫到的柱子i,那么柱子h仍然是影子最靠西的柱子

如果这根柱子h不能完全遮住当前扫到的柱子i,那么柱子i的投影末端就是最靠西的,更新一下就可以了

判断是不是完全遮住简单的,看如果柱子顶端间的正切值比给出的大,那么就可以遮住了啦

为了不使用到坑爹的浮点数,可以,乘过去,就像:\[\frac{H_h-H_i}{X_i-X_h} \geq \frac{T}{A}\]

\[A(H_h-H_i)\geq T(X_i-X_h)\]

#include <algorithm>
#include <cstdio>
using namespace std;

int N;
struct Pillar {
	int X, H;
} p[100005];
int T, A;
int shade;

int main() {
	while (~scanf("%d", &N) && N) {
		shade = 0;
		for (int i = 0; i < N; ++i)
			scanf("%d%d", &p[i].X, &p[i].H);
		scanf("%d/%d", &T, &A);
		sort(p, p + N, [](Pillar x, Pillar y){ return x.X < y.X; });
		int h = 0;
		for (int i = 1; i < N; ++i) {
			if (A * (p[h].H - p[i].H) >= T * (p[i].X - p[h].X))
				++shade;
			else h = i;
		}
		printf("%d\n", N - shade);
	}
	return 0;
}
时间: 2024-12-17 14:08:47

CDOJ 26 遮挡判断(shadow) 解题报告的相关文章

cdoj 26 遮挡判断(shadow) 水题

遮挡判断(shadow) Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/26 Description 在一个广场上有一排沿着东西方向排列的石柱子,阳光从东边以一定的倾角射来(平行光).有的柱子可能被在他东边的高大的柱子的影子给完全遮挡住了.现在你要解决的问题是求出有多少柱子是没有被完全遮挡住的. 假设每个石柱子是一根细棒,而且都垂直于地面摆放. Input 输入包含多组数据

CDOJ 27 棒球防守(baseball) 解题报告

题目链接http://acm.uestc.edu.cn/#/problem/show/27 这题是一道数学计算题,比较坑,花了我几天时间 公式推了挺久的,因为看起来麻烦所以放着几天都懒得做...毕竟暑假 题目给的变量名太蛋疼了,我这里作新的约定 防守员的坐标就是\((x_0, y_0)\),速度\(v_0\)滚地球的速度是\(v\),沿x轴分速度为\(v_x\),y轴分速度为\(v_y\)高飞球的落点是\((x,y)\),飞行时间\(t\) 难点在于滚地球,要求是只要某个内场的恰好碰到球或者提前

【算法学习笔记】26.扫描维护法 解题报告 SJTU_OJ 1133 数星星

SJTU OJ 1133. 数星星 Description 主任和小伙伴晚上非常无聊,于是带着他的宠物狗出来走走.主任突然发现天空中有一条长度为N的字符串,里面的字符都是大写字母.于是主任和他的小伙伴们开始数星星(STAR). 主任和他的小伙伴还有宠物狗数星星的数法不太一样.小伙伴是一个很教条的人,他只喜欢有规则的东西.所以他每次会在字符串里面找最早的’S’,然后找’S’之后最早的’T’,然后找’T’之后最早的’A’,最后找’A’之后最早的’R’.也就是找一个位置最靠前的STAR的子序列.每次找

CDOJ 31 饭卡(card) 解题报告

题目链接:http://acm.uestc.edu.cn/#/problem/show/31 01背包一眼题,没什么好解释…… 背包容量是m-5,留下一个最贵不要在01背包里算,最后买. 没错我需要<algorithm> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; int n, m, p[1005]; int opt[1005]; int nex

【百度之星2014~资格赛解题报告】

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<标题>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=666 前言 最近要毕业了,有半年没做比赛了.这次参加百度之星娱乐一下.现在写一下解题报

codeforces 505A. Mr. Kitayuta&#39;s Gift 解题报告

题目链接:http://codeforces.com/problemset/problem/505/A 题目意思:给出一个长度不大于10的小写英文字符串 s,问是否能通过在字符串的某个位置插入一个字母,使得新得到的字符串成为回文串. /**************************************(又到自我反省时刻) 做的时候,通过添加一个单位使得长度增加1,找出中点,检验前一半的位置,找出对称位置替换成对应的前一半位置的字符,然后原字符串剩下的部分追加到后面,再判断回文.但是由于

poj 1860 Currency Exchange 解题报告

题目链接:http://poj.org/problem?id=1860 题目意思:给出 N 种 currency, M种兑换方式,Nick 拥有的的currency 编号S 以及他的具体的currency(V).M 种兑换方式中每种用6个数描述: A, B, Rab, Cab, Rba, Cba.其中,Rab: 货币A 兑换 货币B 的汇率为Rab,佣金为Cab.Rba:货币B 兑换 货币 A 的汇率,佣金为Cba.假设含有的A货币是x,那么如果兑换成B,得到的货币B 就是:(x-Cab) *

Codeforces Round #259 (Div. 2) 解题报告

终于重上DIV1了.... A:在正方形中输出一个菱形 解题代码: 1 // File Name: a.cpp 2 // Author: darkdream 3 // Created Time: 2014年08月01日 星期五 23时27分55秒 4 5 #include<vector> 6 #include<set> 7 #include<deque> 8 #include<stack> 9 #include<bitset> 10 #inclu

【未完成0.0】Noip2012提高组day2 解题报告

第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一行,包含两个正整数a, b,用一个空格隔开. 输出格式 输出只有一行,包含一个正整数x0,即最小正整数解.输入数据保证一定有解. 样例1 样例输入1 3 10 样例输出1 7 限制 每个测试点1s 提示 对于40%的数据,2 ≤b≤ 1,000: 对于60%的数据,2 ≤b≤ 50,000,000: