hdu 6860 Fluctuation Limit 双向贪心
题意:
给你n个区间[li,ri],和一个整数k,你从每一个区间内选出来一个数,把从第i个区间内选出来数放在第i个位置,这样会构成一个长度为n的序列,你需要保证序列中任意两个相邻的数之差的绝对值要小于等于k
如果这样的序列存在就输出Yes和序列,否认输出No
题解:
就是前后两次贪心就可以了
先说一下从前向后贪心,我们设我们选择的第i个数就是v[i]
因为前一个数的选择会影响到后一个数的选择,所以我们需要进行从前向后贪心
L[i+1]=max(L[i+1],L[i]-k)
R[i+1]=min(R[i+1],R[i]+k)
然后从后到前在进行一边这样的贪心,因为后面的数也会影响前面的数
L[i]=max(L[i],L[i+1]-k)
R[i]=min(R[i],R[i+1]+k)
这样的话会得到一个新的li和ri数组,我们只需要输出其中任意一个元素就行
就是如果第一个区间[L[1],R[1]]输出第L[1],那么第二个区间也就输出L[2]
不要第一个区间输出L[1],第二个区间输出R[2],要输出就输出对等位置的元素
代码:
#include<stack>
#include<queue>
#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fi first
#define se second
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
const int mod=1e9+7;
const double eps=1e-8;
int a[maxn],b[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&a[i],&b[i]);
}
for(int i=2;i<=n;++i)
{
a[i]=max(a[i-1]-k,a[i]);
b[i]=min(b[i-1]+k,b[i]);
}
for(int i=n-1;i>=1;--i)
{
a[i]=max(a[i+1]-k,a[i]);
b[i]=min(b[i+1]+k,b[i]);
}
int flag=0;
for(int i=1;i<=n;++i)
{
if(a[i]>b[i])
{
flag=1;
break;
}
}
if(flag)
{
printf("NO\n");
}
else
{
printf("YES\n");
for(int i=1;i<=n;++i)
if(i==n)
printf("%d\n",a[i]);
else printf("%d ",a[i]);
}
}
return 0;
}
hdu 6860 Fluctuation Limit 双向贪心的更多相关文章
- poj3040(双向贪心)
Allowance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1540 Accepted: 637 Descript ...
- hdu 4825 Xor Sum(trie+贪心)
hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ...
- F - Fluctuation Limit HDU - 6860
题目链接:https://vjudge.net/problem/HDU-6860 题意:相邻两天的差值的绝对值不超过K. 思路:该题的关键在于前面的点会影响后面的点,后面的点会影响前面的点,我们要找到 ...
- HDU 5500 Reorder the Books 贪心
Reorder the Books Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))
Four Operations Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu 1789 Doing HomeWork Again (贪心算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789 /*Doing Homework again Time Limit: 1000/1000 MS ...
- HDU 1789 - Doing Homework again - [贪心+优先队列]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
- HDU 4864 Task(经典贪心)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS (Java/Others) M ...
- hdu 1677 Nested Dolls【贪心解嵌套娃娃问题】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1677 http://acm.hust.edu.cn/vjudge/contest/view.action ...
随机推荐
- 计算机考研复试真题 a+b(大数加法)
题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据,对于每组数据, 输出a+b的值. 示例1 输入 ...
- python 2.7.11 环境安装
0 安装依赖: yum install zlib zlib-devel readline-devel sqlite-devel bzip2-devel openssl-devel gdbm-deve ...
- 【Git】Git初始化一个仓库
文章目录 初始化仓库 检查当前文件状态 跟踪新文件 提交更新 跳过使用暂存区域 移除文件 添加远程仓库 推送到远程仓库 简单记录-慕课网 从0开始 独立完成企业级Java电商网站开发 Git初始化一个 ...
- 更改mysql的密码
mysql> set password for 'root'@'localhost' =PASSWORD('');Query OK, 0 rows affected (0.17 sec) mys ...
- 【Linux】postfix大坑笔记
由于需要,想弄一个自动发送邮件的mailx或者sendmail 但是执行 echo "test" | mail -s "Worning mail !" xxxx ...
- 【Oracle】更改oracle中的用户名称
修改oracle中的用户名,要需要修改oracle基表中的相关内容, 1.查看user#, select user#,name from user$ s where s.name='用户修改前的'; ...
- CTFHub - Web(四)
最近又是每天忙到裂开,,,淦 xss: 反射型: 1.第一个输入框与下面Hello后的内容相同,猜测可以通过该输入,改变页面内容. 测试语句: <script>alert(1)</s ...
- BINARY SEARCH 的一点说明
在sap 之abap语言中,有BINARY SEARCH这个查找条件.使用read table 来读取内表时,使用BINARY SEARCH可以大大的提高查找的效率,为什么呢?学过数据库的人会知道 ...
- 3A的限流芯片PW1503
PW1503是超低RDS(ON)开关,具有可编程的电流限制,以保护电源于过电流和短路情况.它具有超温保护以及反向闭锁功能. PW1503采用薄型(1毫米)5针薄型SOT封装,提供可调版本. 特征 ...
- vfd-cloud——一个适合练习上手的云存储网盘springboot项目(开发中)
vfd-cloud 一个基于SpringBoot的云存储网盘项目,适合练手学习SpringBoot,用到的技术栈列到了下面.支持用户的注册登陆及修改密码,利用邮箱进行验证.支持 ...