HDU 6852 Increasing and Decreasing 构造
题意:
给你一个n,x,y。你需要找出来一个长度为n的序列,使得这个序列满足最长上升子序列长度为x,最长下降子序列长度为y。且这个序列中每个数字只能出现一次
且要保证最后输出的序列的字典序最小
题解:
因为要保证字典序最小,那么肯定是使用前n个数,即[1,n]
我们可以首先让下降子序列用最大的值,且把它们放在序列最后,例如n=10,x=5,y=5
那么我们就让下降子序列使用6,7,8,9,10.而且把这5个数反转一下变成10,9,8,7,6追加到序列尾部
那么剩下的n-y个数去构建出来一个最长上升子序列为x-1的序列就行
为什么是x-1?因为最后y个数比前的任意一个数都要大,所以最长上升子序列部分这里也要占用1个位置
然后我们挑选出来x-1个数组成上升序列,挑选出来的数用wi表示(还是用的上面10,5,5的例子)
1 w1 2 w2 3 w3 4 w4
这个序列的1,2,3,4这些位置可以用长度为y-1的下降序列来插入其中
因为题目要求输出字典序最小,那么我们就把w4尽可能使用y-1个数,然后w3尽可能使用y-1个数,依次类推
假设w1部分使用了h个数,那么1 w1这1+h个位置使用前h+1个数来构造序列
这样构造就是最小的
题目要特判x*y>=n&&x+y<=n+1输出NO,我的x+y<=n+1是找出来的,但是x*y>=n这个我也不清楚。。。。
代码:
#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;
typedef long long ll;
ll n,x,y,ans[maxn];
ll pre[maxn],len[maxn];
int main()
{
ll t;
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld%lld",&n,&x,&y);
if(1ll*x*y>=n&&x+y<=n+1)
{
printf("YES\n");
ll res=n-y;
for(ll i=1; i<=x-1; i++) //枚举这是第几个空隙
{
len[i]=res-1ll*(x-1-i)*y; //应该向第i个空隙内插入多少数
if(len[i]<=0) //x-1-i表示这个空隙之前有多少个空隙
{ //至于为什么要乘于y,是因为下降序列y-1个数,上升序列的一部分占1个位置
len[i]=1;
}
res=res-len[i];
pre[i]=pre[i-1]+len[i];
}
for(ll i=1; i<=x-1; i++)
{
for(ll j=pre[i-1]+1; j<=pre[i]; j++)
{
ans[i]=pre[i]-j+pre[i-1]+1; //这个就相当于用【1,n】这n个数,来构造长度为n的序列
printf("%lld ",ans[i]);
}
}
for(ll i=n; i>=n-y+1; i--)
{
printf("%lld%c",i,i==n-y+1?'\n':' ');
}
}
else
{
printf("NO\n");
}
}
return 0;
}
HDU 6852 Increasing and Decreasing 构造的更多相关文章
- BNUOJ 52325 Increasing or Decreasing 数位dp
传送门:BNUOJ 52325 Increasing or Decreasing题意:求[l,r]非递增和非递减序列的个数思路:数位dp,dp[pos][pre][status] pos:处理到第几位 ...
- Problem I. Increasing or Decreasing MIPT-2016 Pre-Finals Workshop, Taiwan NTU Contest, Sunday, March 27, 2016
题面: Problem I. Increasing or DecreasingInput file: standard inputOutput file: standard outputTime li ...
- HDU - 6313 Hack It(构造)
http://acm.hdu.edu.cn/showproblem.php?pid=6313 题意 让你构造一个矩阵使得里面不存在四个顶点都为1的矩形,并且矩阵里面1的个数要>=85000 分析 ...
- HDU 5573 Binary Tree【构造】
几天前模拟区域赛的一道题,今天发现在草稿箱里直接补个博客. 感觉这还是一道很有意思的构造题. 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5573 ...
- 2020杭电多校 10C / HDU 6879 - Mine Sweeper (构造)
HDU 6879 - Mine Sweeper 题意 定义<扫雷>游戏的地图中每个空白格子的值为其周围八个格子内地雷的数量(即游戏内临近地雷数量的提示) 则一张地图的值\(S\)为所有空白 ...
- hdu 2256 Problem of Precision 构造整数 + 矩阵快速幂
http://acm.hdu.edu.cn/showproblem.php?pid=2256 题意:给定 n 求解 ? 思路: , 令 , 那么 , 得: 得转移矩阵: 但是上面求出来的并 ...
- HDU 3030 - Increasing Speed Limits
Problem Description You were driving along a highway when you got caught by the road police for spee ...
- HDU 5741 Helter Skelter(构造法)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5741 [题目大意] 一个01相间的串,以0开头,给出的序列每个数字表示连续的0的个数或者1的个数, ...
- HDU 5573 Binary Tree(构造题)
http://acm.hdu.edu.cn/showproblem.php?pid=5573 题意:给出一个满二叉树,根节点权值为1,左儿子为2*val,右儿子为2*val+1.现在有只青蛙从根节点出 ...
随机推荐
- 【Git】命令行操作
Git 命令行操作 1 本地库初始化 git init:初始化本地仓库 效果 注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改. 2 设置签名 形式: 用户名:tom E ...
- Flink SQL结合Kafka、Elasticsearch、Kibana实时分析电商用户行为
body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...
- leetcode 117. 填充每个节点的下一个右侧节点指针 II(二叉树,DFS)
题目链接 https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/ 题目大意 给定一个二叉树 s ...
- ctfshow—web—web2
打开靶机,根据提示是SQL注入 打开后看到登录窗口 方法一.手工注入 抓取数据包 开始SQL注入测试 利用万能密码,登录成功 查看回显位置 查询数据库 查询数据库内数据表 如果想整齐一点显示可以添加g ...
- Android之Xposed
基础书籍推荐:1.疯狂JAVA讲义:2.疯狂安卓讲义: 逆向分析必须知道他的原理,不然只会用工具,那就直接GG. 谷歌的镜像网站:https://developers.google.com/andro ...
- HTML基础复习1
网页:HTML(超文本标记语言) 网页分为静态网页和动态网页,区别:动态网页中可以加入脚本代码,还可以动态的引入数据库中的信息. HTML的结构 <html> <head>头信 ...
- ADB命令连接逍遥模拟器
注:打开模拟器开发者模式 ->USB调试模式 1.先进入逍遥模拟器安装目录(MEmu文件夹下),如:D:\Program Files\Microvirt\MEmu 2.在CMD下输入:adb c ...
- 13 | 实战:单机如何实现管理百万主机的心跳服务? https://time.geekbang.org/column/article/240656
13 | 实战:单机如何实现管理百万主机的心跳服务? https://time.geekbang.org/column/article/240656
- the minimum number of bits required to represent x 最小位数
src/math/bits/bits.go:296 // --- Len ---// Len returns the minimum number of bits required to repres ...
- 深入TLS/SSL协议
总体 TLS/SSL协议是为了解决网络通讯中的信息安全问题而诞生的. 它的设计目的主要有三个: 身份验证--搞清楚与我通讯的人是不是我所想的那个. 保密性--就算第三方拿到了通讯内容,也搞不清楚其中所 ...