Codeforces1304D Shortest and Longest LIS
前置扯淡
%%@\(wucstido\),思路是在是巧妙---link
Description
给一个长度为\(n\)由 \(<\) 和 \(>\)组成的字符串,表示序列中相邻位置的数的大小关系
求构造两种排列,使得其在满足上述条件的情况下的 \(LIS\) 分别最长\(/\)最短
Solution
直接考虑构造最短的排列,然后最长的同理(真的是把符号改改就可以了)
整个排列\(LIS\)的最小值在最长的一段\("<"\)中取得,然后我们考虑构造
先把整个排列逆序过来:即 \(a_i=n-i+1\)
然后对于每一个\("<"\),翻转相邻的数字
正确性显然(真的是很巧妙!!!!!!)
最长的构造就是初始化正序,大于号翻转!就完事啦!!
别想复杂了,构造题就是构造题
Code
#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace yspm{
inline int read()
{
int res=0,f=1; char k;
while(!isdigit(k=getchar())) if(k=='-') f=-1;
while(isdigit(k)) res=res*10+k-'0',k=getchar();
return res*f;
}
const int N=2e5+10;
char s[N]; int ans[N],n;
inline void work()
{
n=read(); scanf("%s",s+1);
for(int i=1;i<=n;++i) ans[i]=n-i+1;
for(int i=1;i<n;++i)
{
int j=i; while(s[j]=='<') ++j; reverse(ans+i,ans+j+1); i=j;
} for(int i=1;i<=n;++i) printf("%lld ",ans[i]); puts("");
for(int i=1;i<=n;++i) ans[i]=i;
for(int i=1;i<n;++i)
{
int j=i; while(s[j]=='>') ++j; reverse(ans+i,ans+j+1); i=j;
} for(int i=1;i<=n;++i) printf("%lld ",ans[i]); puts("");
return ;
}
signed main()
{
int T=read(); while(T--) work();
return 0;
}
}
signed main(){return yspm::main();}
Codeforces1304D Shortest and Longest LIS的更多相关文章
- Shortest and Longest LIS
Codeforces Round #620 (Div. 2) D. Shortest and Longest LIS 题解: 贪心即可,对于最短序列,我们尽可能用可用的最大数字放入序列中,对于最长序列 ...
- [CF1304D] Shortest and Longest LIS - 贪心
看样例,>><>><,要构造 LIS 最短的,我们需要找最小链划分的方案,即包含最少的下降列 很容易想到把连续 < 的看成一段,比如样例就是 .|.|. .| ...
- Codeforces 1304D. Shortest and Longest LIS
根据题目,我们可以找最短的LIS和最长的LIS,找最短LIS时,可以将每一个increase序列分成一组,从左到右将最大的还未选择的数字填写进去,不同组之间一定不会存在s[i]<s[j]的情况, ...
- Codeforces 1304D. Shortest and Longest LIS 代码(构造 贪心)
https://codeforces.com/contest/1304/problem/D #include<bits/stdc++.h> using namespace std; voi ...
- Codeforces Round #620 (Div. 2) A-F代码 (暂无记录题解)
A. Two Rabbits (手速题) #include<bits/stdc++.h> using namespace std; typedef long long ll; int ma ...
- Codeforces Round #620 (Div. 2) 题解
A. Two Rabbits 思路: 很明显,如果(y-x)%(a+b)==0的话ans=(y-x)/(a+b),否则就为-1 #include<iostream> #include< ...
- Codeforces Round #620 (Div. 2)
Codeforces Round #620 (Div. 2) A. Two Rabbits 题意 两只兔子相向而跳,一只一次跳距离a,另一只一次跳距离b,每次同时跳,问是否可能到同一位置 题解 每次跳 ...
- LeetCode Number of Longest Increasing Subsequence
原题链接在这里:https://leetcode.com/problems/number-of-longest-increasing-subsequence/description/ 题目: Give ...
- soj 1015 Jill's Tour Paths 解题报告
题目描述: 1015. Jill's Tour Paths Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Every ...
随机推荐
- java课程之团队开发冲刺阶段2.1
一.总结昨天任务 1.由于使用的模拟器,自己没有安卓手机,所以在制作手机静音功能的时候有一些麻烦 2.功能没有完成 二.遇到的困难 1.安卓手机的静音功能分为五个部分的静音,需要每个都要静音 2.当在 ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:比较 和 逻辑运算符
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- SASS - @extend(继承)指令
SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...
- 兼容iphonex底部那个
@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ra ...
- tensorflow笔记2(北大网课实战)
1.正则化缓解过拟合 正则化在损失函数中引入模型复杂度指标,利用给w加权值,弱化了训练数据的噪声 一般不会正则化b. 2.matplotlib.pyplot 3.搭建模块化的神经网络八股: 前向传播就 ...
- 51nod 1438:方阵与完全平方数
1438 方阵与完全平方数 题目来源: mostleg 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 如果一个由正整数组成的n*n的方阵,满足以下 ...
- 18 12 14 python提高 装饰器
---恢复内容开始--- 装饰器还真的有些没看懂 一个任意传参的装饰器 一个通用装饰器 def set_func(func): print("------开始进行装饰") # ...
- (转)mysql语句
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- Java--定时
TimerTask task = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub ...
- 挑战目标跟踪算法极限,SiamRPN系列算法解读
商汤科技智能视频团队首次开源其目标跟踪研究平台 PySOT.PySOT 包含了商汤科技 SiamRPN 系列算法,以及刚被 CVPR2019 收录为 Oral 的 SiamRPN++.此篇文章将解读目 ...