Codeforces Round #522 (Div. 2) C. Playing Piano
C. Playing Piano
题目链接:https://codeforces.com/contest/1079/problem/C
题意:
给出数列{an},现在要求你给出一个数列{bn},满足:
1.当an+1>an时,有bn+1>bn;2.当an+1=an时,有bn+1!=bn;3.当an+1<an时,有bn+1<bn。 且满足1<=bn<=5。
题解:
我们可以考虑动态规划,设dp(i,j)为第i位置时,b(i)=j是否可行。
那么状态转移时可以分ai>ai-1,ai=ai-1,ai<ai-1三种情况考虑,同时记录一下路径方便输出。
具体见代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+;
int dp[N][],path[N][];
int n ;
int a[N];
int main(){
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=;i++) dp[][i]=;
for(int i=;i<=n;i++){
for(int j=;j<=;j++){
if(dp[i-][j]==) continue ;
if(a[i]>a[i-]){
for(int k=j+;k<=;k++){
dp[i][k]=;
path[i][k]=j;
}
}else if(a[i]<a[i-]){
for(int k=;k<j;k++){
dp[i][k]=;
path[i][k]=j;
}
}else{
for(int k=;k<=;k++){
if(k==j) continue ;
dp[i][k]=;
path[i][k]=j;
}
}
}
}
int ok = ,j;
for(int i=;i<=;i++) if(dp[n][i]) ok=,j=i;
if(!ok){
printf("-1");
return ;
}
stack <int> s;
for(int i=n;i!=;i--){
s.push(j);
j=path[i][j];
}
while(!s.empty()){
cout<<s.top()<<" ";
s.pop();
}
return ;
}
Codeforces Round #522 (Div. 2) C. Playing Piano的更多相关文章
- Codeforces Round #184 (Div. 2) E. Playing with String(博弈)
		
题目大意 两个人轮流在一个字符串上删掉一个字符,没有字符可删的人输掉游戏 删字符的规则如下: 1. 每次从一个字符串中选取一个字符,它是一个长度至少为 3 的奇回文串的中心 2. 删掉该字符,同时,他 ...
 - Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) Solution
		
A. Kitchen Utensils Water. #include <bits/stdc++.h> using namespace std; #define N 110 int n, ...
 - Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) C. Playing Piano
		
题意:给出一个数列 a1 a2......an 让你构造一个序列(该序列取值(1-5)) 如果a(i+1)>a(i) b(i+1)>b(i) 如果a(i+1)<a(i) 那么b( ...
 - Codeforces Round #296 (Div. 2)  A. Playing with Paper
		
A. Playing with Paper One day Vasya was sitting on a not so interesting Maths lesson and making an o ...
 - 水题 Codeforces Round #296 (Div. 2) A. Playing with Paper
		
题目传送门 /* 水题 a或b成倍的减 */ #include <cstdio> #include <iostream> #include <algorithm> ...
 - Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)B. Personalized Cup
		
题意:把一长串字符串 排成矩形形式 使得行最小 同时每行不能相差大于等于两个字符 每行也不能大于20个字符 思路: 因为使得行最小 直接行从小到大枚举即可 每行不能相差大于等于两个字符相当于 ...
 - Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) D. Barcelonian Distance 几何代数(简单)
		
题意:给出一条直线 ax +by+c=0 给出两个整点 (x1,y1) (x2,y2) 只有在x,y坐标至少有一个整点的时 以及 给出的直线才有路径(也就是格子坐标图的线上) 问 两个整点所需要 ...
 - Codeforces Round #522 Div. 1 没打记
		
开场被A劝退,写了得有50min于是不敢交了.unrated了喜闻乐见. A:瞎猜都能猜到如果要走到那条直线上,进入直线的点横坐标或纵坐标与起点相同,离开直线的点横坐标或纵坐标与终点相同,证明脑补一下 ...
 - Codeforces Round #277 (Div. 2) 题解
		
Codeforces Round #277 (Div. 2) A. Calculating Function time limit per test 1 second memory limit per ...
 
随机推荐
- docker官方仓库下载镜像
			
官方仓库镜像地址:https://hub.docker.com/search/ 以下载mysql为例 进入到详情页后我们看到有很多Tags 我们选择5.7.25版本进行下载 # docker pull ...
 - HTML+CSS : 笔记整理(2 常规流,BFC,固定定位,z-index)
			
BFC和常规流的关系是什么:常规流遵循BFC,IFC规则. 定位规则总体来说三种: 常规流,浮动,绝对定位(CSS3里面新加了一种flex) 其中常规流包括BFC,IFC等规则,块级元素一个一排地从上 ...
 - foreachRDD,foreach,foreachPartition区别联系
			
foreachRDD(SparkStreaming): SparkStreaming是流式实时处理数据,就是将数据流按照定义的时间进行分割(就是"批处理").每一个时间段内处理到的 ...
 - 图解HTTP总结(3)——HTTP报文内的HTTP信息
			
HTTP通信过程包括从客户端发往服务端的请求及从服务器端返回客户端的响应. 用于HTTP协议交互的信息被称为HTTP报文.客户端的HTTP报文叫做请求报文,服务器端的叫做响应报文.HTTP报文本身是多 ...
 - QWidget 自带的最大化,最小化,关闭按键的设置
			
使用函数 setWindowFlags 参数: CustomizeWindowHint 去掉窗口所有自带按钮 Qt::CustomizeWindowHint | Qt::WindowCloseButt ...
 - 霍夫直线检测 opencv
			
本次实验是检测图像中的直线,用到了HoughLines()和HoughLinesP()函数,其中HoughLinesP()称为累计概率霍夫变换,实验结果显示累计概率霍夫变换要比标准霍夫变换的效果好.具 ...
 - POJ:2456-Aggressive cows
			
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18313 Accepted: 8716 Desc ...
 - 17-比赛1 B - 子串计算  Chef and his string challenge (string的运用)
			
Chef's best friend Jerry gives Chef a string A and wants to know the number of string A that can be ...
 - pyhton,数据类型
			
标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) Tuple(元组) List(列表) Sets(集合) Dictionary(字典) 重点是: 类 ...
 - 20145202马超 《Java程序设计》第六周学习总结
			
进程:是一个正在执行中的程序,每一个进程都有一个执行程序,该顺序是一个执行路径,或者说是一个控制单元. 线程:就是进程中的一个独立的控制单元,线程在控制着进程的执行. 一个进程至少有一线程. Java ...