经典二分题----光合作用
来源:互联网 发布:mongodb和mysql对比 编辑:程序博客网 时间:2024/04/29 11:25
蒜头是个爱学习的孩子,他总喜欢在生活中做一些小实验,这次蒜头想研究一下光合作用。
蒜头的实验材料有如下几样:神奇的种子,普通的纸箱和一些光源。一开始,蒜头将种子均匀的种在了箱子底部,你可以将其看成 XX 轴,种子的位置为 XX 轴上的点。然后蒜头用纸板将箱子盖住,并在纸板上安装了一些光源(具体见图)。神奇的种子会在有光的情况下一直向上生长直到没光为止。现在蒜头想知道当实验结束时每颗种子的高度是多少?
顶上的为光源,光源两边与顶部的夹角都为 45^{\circ}45
∘
,黄色部分为光照,绿色的为植物。
输入格式
第一行输入一个整数 TT,表示测试数据的组数。
每组数据的第一行是三个整数 n,m,H(1 <= n< =10^5, 0 <=m <= 10^5, 1 <= H<= 10^4). n 表示种子数(编号为 n1⋯n),m 表示光源数,H 表示箱子的高度。
接下来 m行,每行一个整数 X_iX
i
表示第 i 个光源在顶部的位置。
输出格式
对于每组测试数据,请输出 n 行,每行一个数表示第 i 颗种子的最终高度。
样例输入
2
7 1 2
4
4 4 1
1
2
3
4
样例输出
0
0
1
2
1
0
0
1
1
1
1
易错点:
1.用cin,cout输入输出会超时.
2.忽视了m=0的情况,要看清变量的取值范围.
AC代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int a[100005];int abs(int t){ return max(t,-t);}int main(){ int n,m,h,T; scanf("%d",&T); while(T--) { cin>>n>>m>>h; memset(a,0,sizeof(a)); for(int i=0;i<m;i++) scanf("%d",&a[i]); sort(a,a+m); for(int i=1;i<=n;i++) { if(m==0) { printf("0\n"); continue; } int pos=lower_bound(a,a+m,i)-a; int ans; if(pos!=0) { if(pos==m) printf("%d\n",max(0,h-(i-a[pos-1]))); else { ans=max(0,max(h-(a[pos]-i),h-(i-a[pos-1]))); printf("%d\n",ans); } } else { ans=max(0,h-(a[pos]-i)); printf("%d\n",ans); } } } return 0;}
阅读全文
0 0
- 经典二分题----光合作用
- 光合作用 (二分)
- 计蒜客 -光合作用-二分查找
- 二分 二分经典题目
- 【二分匹配】 HDU 5093 Battle ships 经典二分题
- 动物也会光合作用
- poj 2391 经典题 二分+最大流
- ZOJ 1654 (经典二分构图题)
- 【经典算法】二分查找
- 经典的二分查找
- 经典二分穷举
- 二分搜索经典题目
- 【经典算法】:二分查找
- 经典二分算法详解
- 经典二分查找问题
- codeforces672D(经典二分)
- hdu_1083_经典二分图
- 经典二分查找问题
- HDU2055
- mysql索引的数据结构
- 在Java-web中实现图片上传到ftp图片服务器
- CryptoJS 加密的使用方法
- [21]_如何选择合适的IO口并接上合适的外设?
- 经典二分题----光合作用
- Java学习笔记3——System类
- dpkg:处理 xxx (--configure)时出错解决办法
- 057day(流插入,流提取运算符和类型转换运算符的重载)
- 转载-【整理】详解Python中re.sub
- HDU-1241 Oil Deposits
- Linux 进程控制编程
- C语言中 * "星号"的九种用法
- spring下动态数据源的切换