CodeForces - 1252E Songwriter(贪心)
题目链接:点击查看
题目大意:给出一个长度为 n 的序列 a ,现在需要构造出一个长度为 n 的序列 b ,满足相邻的 i 和 i + 1 下,a[ i ] 和 a[ i + 1 ] 的大小关系应该和 b[ i ] 和 b[ i + 1 ] 的大小关系相同,且相邻的 abs( b[ i ] - b[ i + 1 ] ) <= k ,且任意的 b[ i ] 都属于 [ L , R ] 之间
题目分析:因为最后的答案需要输出字典序最小,所以我们可以设 [ L , R ] 为最后一个位置的可行范围,然后倒着递推每个位置的可行范围,最后求出第一个位置的可行范围就是其可行解了,在递推可行范围的时候,注意需要同时满足以下三个条件:
- l[ i ] >= r[ i ]
- l[ i ] >= L
- r[ i ] <= R
然后从第一个位置向后贪心取最小的位置就可以了
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;int a[N],l[N],r[N];int main()
{
#ifndef ONLINE_JUDGE
// freopen("data.in.txt","r",stdin);
// freopen("data.out.txt","w",stdout);
#endif
// ios::sync_with_stdio(false);int n,L,R,k;scanf("%d%d%d%d",&n,&L,&R,&k);for(int i=1;i<=n;i++)scanf("%d",a+i);auto check=[&](){l[n]=L,r[n]=R;for(int i=n-1;i>=1;i--){if(a[i]==a[i+1]){l[i]=l[i+1];r[i]=r[i+1];}else if(a[i]<a[i+1]){l[i]=max(L,l[i+1]-k);r[i]=r[i+1]-1;}else if(a[i]>a[i+1]){l[i]=l[i+1]+1;r[i]=min(R,r[i+1]+k);}if(l[i]>r[i]||l[i]<L||r[i]>R)return false;}return true;};if(!check())return 0*puts("-1");int ans=l[1];for(int i=1;i<=n;i++){printf("%d ",ans);if(a[i]==a[i+1])continue;else if(a[i]>a[i+1])ans=max(ans-k,l[i+1]);else if(a[i]<a[i+1])ans=max(ans+1,l[i+1]);}puts("");return 0;
}
CodeForces - 1252E Songwriter(贪心)相关推荐
- Codeforces1600数学day5[找规律CodeForces - 1059C,贪心数学A - Banh-mi CodeForces - 1062C ]
A - Banh-mi CodeForces - 1062C 题目大意:就是开始给你一个01序列,和q次询问,每次询问会给你一个区间,每次你会从这个区间内拿出一个数,在区间内的其他未被拿走的数字会加上 ...
- CodeForces - 1494D Dogeforces(贪心+构造)
题目链接:点击查看 题目大意:给出 nnn 个叶子结点和一个 n∗nn*nn∗n 的 LCALCALCA 矩阵,其中 LCALCALCA 表示的是最近公共祖先节点的权值,现在需要构造出一棵自顶向下权值 ...
- Codeforces 1203E Boxers(贪心)
题目链接:https://codeforces.com/problemset/problem/1203/E 题意:给定n个数字,每个数字可以进行一次+1或是-1的变换(也可以不变),问通过对部分数字适 ...
- codeforces数学1600day4[贪心数学公式推导CodeForces - 1151D ,思维CodeForces - 1085C,数论同余+组合计数 CodeForces - 1056B]
A - Stas and the Queue at the Buffet CodeForces - 1151D 题目大意:就是给你n个人在排队,每个人都有一个ai值和bi值,每个人的不满意度就是f(i ...
- Codeforces 1093C (思维+贪心)
题面 传送门 题目大意: 有一个长n(n为偶数)的序列a 已知a满足 \(a_1≤a_2≤⋯≤a_n\) 给出一个长度为\(\frac{n}{2}\) 的序列b,定义\(b_i=a_i+a_{n-i+ ...
- codeforces#236_div2_A nuts 贪心
题目地址:cf#236_div2_A 题目大意: 给你四个数 k,a,b,v; k代表每个隔间最多不能超过的数目 ,a是果子个数,b是有多少隔板数量,v是一个隔板最多能装多少 现在问你,要 ...
- CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)
题目链接:点击查看 题目大意:给出 nnn 个点,任意两个点之间的边权为 ai⊕aja_i\oplus a_jai⊕aj,求最小生成树 题目分析:去年多校写过一样的模型,再拿出来写一遍回顾一下:牛 ...
- CodeForces - 1369E DeadLee(贪心+拓扑)
题目链接:点击查看 题目大意:Lee的厨房中有 n 道菜,每道菜的数量为 w[ i ] ,现在 Lee 会邀请 m 个朋友,每个朋友都有最爱吃的两道菜 x[ i ] 和 y[ i ] ,当朋友 i 来 ...
- CodeForces - 1287C Garland(贪心)
题目链接:点击查看 题目大意:原本有一个1~n的排列,现在缺少了一些数字,用0来代替,现在要求将缺少的数字重新填回去,要求代价和最少,规定代价为:若相邻两个数字的奇偶性不同,则代价为1,否则代价为0 ...
最新文章
- 无线路由器与无线AP的区别
- 小冰负责人李笛:微软不缺钱,缺对未来的把握
- 31全志r58平台Android4.4.2下打开USB摄像头
- 数据挖掘导论读书笔记9聚类分析
- SEO日暮途穷?做好几点实现华丽蜕变
- DatabaseMetaData.getIndexInfo
- OPA 23 - Mock server
- win10无法检验服务器出示的ssl证书,win10系统网站启用ssL安全证书的操作方法
- python创建变量revenue、并赋值为98765_第七章:Python之数据库编程
- led数字字体_技术丨体育场馆LED显示屏设计与安装要求
- DirectSound学习笔记(2):创建设备对象
- 《Supervised Descent Method and its Applications to Face Alignment》阅读笔记
- 手机可用熵_时间之矢,生命之熵
- Android开发笔记(一百四十五)仿应用宝的垃圾清理动画
- Vim 配置详解_wuyang
- 向量的数量积,向量积,混合积及应用
- Unity给模型添加逼真效果材质
- 推荐几个在线处理文件、图片、音视频的工具,免费又好用!
- ASF 董事会是如何炼成的?
- 倒序存放数组java_java 将一个数组逆序输出的方法