题目链接


题目大意

复杂版大意是我们可以从左右两端每次拿走一个数,一直拿,不过要满足一个条件,每次拿的数要保证严格递增(即从小到大然后不会有相同的情况) 复杂版的话是会有相同的数字出现 在题解中正式说明

(C1) Increasing Subsequence (easy version) 博客地址


题解

在C1简易版已经把题意说的比较清楚了,对于复杂版的,我们就是在简易版加一条if语句,如果遇到了相同的值,那么我们就跳出循环,进行下一步比较

起初,对于相同的值那个点,我刚开始以为会有很多次这样的临界情况,然后要各种分析讨论,后面队友一下点醒了我,我们只要遇到了相同的数字,那么我们以后的方向就只有一种情况了,要么往左走到底,要么往右走到底,也就是标题所说:“撞到南墙也不回头!”

从下面代表即可看出,遇到相同的数字时,我们直接跳出简单版内的循环,然后我们通过两次遍历,从左游标到末尾,从右游标到头,然后找出长度最长的 (必须保证严格递增)

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int a[maxn],n;
string s="";
int main(){ios::sync_with_stdio(false);cin.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}int i=1,j=n;int tmp=0;while(i<=j){if(a[i]==a[j]) break;else if(min(a[i],a[j])>tmp){if(a[i]<a[j]){tmp=a[i];i++;s+="L";}else{tmp=a[j];j--;s+="R";}}else if(max(a[i],a[j])>tmp){if(a[i]>a[j]){tmp=a[i];i++;s+="L";}else{tmp=a[j];j--;s+="R";}}else break;}//cout<<tmp<<endl;if(a[i]==a[j]){int tmp1=tmp;int tmp2=tmp;int le=0;for(int k=i;k<=n;k++){if(a[k]>tmp1){tmp1=a[k];le++;}else break;}int re=0;for(int k=j;k>=1;k--){if(a[k]>tmp2){tmp2=a[k];re++;}else break;}if(le>re){while(le--) s+="L";}else{while(re--) s+="R";}}/*if(s.length()==0){cout<<1<<endl;cout<<"R"<<endl;return 0;}*/cout<<s.length()<<endl;cout<<s<<endl;return 0;
}
学如逆水行舟,不进则退

Codeforces Round #555 (Div. 3), problem: (C2) Increasing Subsequence (hard version)【贪心+撞到南墙也不回头】相关推荐

  1. Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) 贪心

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串sss,你有两个操作可以使用: (1)(1)(1)从sss的结尾删除一个字母. (2)s=s+s(2)s=s+s(2)s=s+s. 让 ...

  2. Codeforces Round # 555 (Div. 3) C2. Increasing subsequence (complicated version) (贪心)

    题目链接:http://codeforces.com/contest/1157/problem/C2 当左右两边数字相同时,需要判断一下取哪边能得到更长的递增序列 #include <iostr ...

  3. Codeforces Round #555 (Div. 3) c2 d e f

    c2:Increasing Subsequence (hard version) 那边小取那边,然后相等比较后面的长度 #include<bits/stdc++.h> using name ...

  4. Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心

    传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...

  5. Codeforces Round #579 (Div. 3) F1. Complete the Projects (easy version) 排序 + 贪心

    传送门 文章目录 题意: 思路: 题意: 思路: 比较直观的想法就是对于bi≥0b_i\ge0bi​≥0的项目,我们将aia_iai​从小到大排序,让后依次加bib_ibi​,如果有取不到的,显然就无 ...

  6. Codeforces Round #167 (Div. 1) C. Dima and Horses(BFS+贪心)

    题目大意 有 n(1≤n≤3*105) 匹马,每条马都有几个敌人(不超过 3 个),现在要求把这些马分成两部分(允许一部分中没有一条马),使得对于每条马,和它在同一部分中的敌人的数量不超过1个 给出了 ...

  7. Codeforces Round #555 (Div. 3) AB

    A:    http://codeforces.com/contest/1157/problem/A 题意:每次加到10的整数倍之后,去掉后面的0,问最多有多少种可能. 1 #include < ...

  8. Codeforces Round #243 (Div. 2) Problem B - Sereja and Mirroring 解读

    http://codeforces.com/contest/426/problem/B 对称标题的意思大概是.应当指出的,当线数为奇数时,答案是线路本身的数 #include<iostream& ...

  9. Codeforces Round #439 (Div. 2) Problem C (Codeforces 869C) - 组合数学

    - This is not playing but duty as allies of justice, Nii-chan! - Not allies but justice itself, Onii ...

最新文章

  1. python第二十九课——文件读写(复制文件)
  2. Linux那些事儿之我是Sysfs(3)设备模型上层容器
  3. Codeforces Round #232 Editorial Div2-B
  4. sql查询两张表的并集union和union all
  5. Vmware提示:host usb device connections disabled-(vmware 主机已禁用 usb 设备连接)
  6. 机器学习——相似度算法汇总
  7. react 使用 mobx_如何使用React和MobX状态树构建基于状态的路由器
  8. 算法工程师面试备战笔记5_下面哪个不属于数据的属性类别
  9. linux删除第二列为空_Linux系列第二谈(开机关机、Linux中的文件、目录管理、基本属性)...
  10. Vim vimrc配置
  11. 综述|线结构光中心提取算法研究
  12. 从简单泛函到第二类拉格朗日方程
  13. TeXLive2021+TeXStudio安装及配置,亲测有效!
  14. 获取网站CDN加速的真实服务器IP方法
  15. 尚硅谷Web前端ES6教程,涵盖ES6-ES11
  16. css渐变背景色与切角
  17. 转:[Server] 在 Windows 上安裝 PHP 5.3 開發環境
  18. 电商API接口系列,数据分享
  19. 解决Spring Spring Data JPA 错误: Page 1 of 1 containing UNKNOWN instances
  20. 2022道路运输安全员考试题库多选预测分享(2)

热门文章

  1. R语言基础指令和并行算法初识(上篇)
  2. 修改Odoo 8版权信息
  3. 【产业互联网周报】容联云下周纽交所挂牌;声网Agora因Clubhouse股价周内涨超30%;贝索斯将卸任亚马逊CEO...
  4. 教师运用计算机上课的随笔,初中信息技术教师的教学随笔5
  5. 基于Java+springboot+mvc+vue员工管理系统
  6. HTML知识点学习(二)
  7. OI-wiki 算法基础 模拟 NOIP2014 生活大爆炸版石头剪刀布 python
  8. 避免当野monkey, 走野路子
  9. 阿里云虚拟空间No input file specified
  10. TCGA肿瘤数据分析专题