SnackDown Longest Increasing Subsequences 构造题
Longest Increasing Subsequences
题目连接:
https://www.codechef.com/SNCKPA16/problems/MAKELIS
Description
大厨最近了解了经典的最长上升子序列问题。然而,大厨发现,虽然最长上升子序列的长度
是唯一的,但子序列本身却不一定唯一。比如,序列 [1, 3, 2, 4] 的最长上升子序列有两个:[1, 3, 4]
和 [1, 2, 4]。
大厨在这个方向上多做了些研究,然后提出了下面的这个问题:
给定 K,输出一个整数 N 以及一个 1 ∼ N 的排列,使得这一排列包含恰好 K 个最长上升子
序列。大厨要求 1 ≤ N ≤ 100,不然问题就太简单了。
如果有多种可能的答案,输出任意一种即可。
Input
输入的第一行包含一个整数 T,表示测试数据的组数。接下来是 T 组数据。
每组数据仅有一行,包含一个整数 K。
Output
对于每组数据,输出两行。第一行包含一个整数 N,第二行包含 N 个整数,即 1 ∼ N 的一个
排列,以空格分隔。
• 1 ≤ T ≤ 2 · 104
• 1 ≤ K ≤ 105
Sample Input
2
1
2
Sample Output
5
1 2 3 4 5
4
1 3 2 4
Hint
题意
题解:
很有趣的题,一般来说第一想法是分解质因数,变成乘积的形式,我不知道这样搞不搞得出来,很麻烦的样子……
这道题的正确套路是分解进制,考虑你现在是用m进制去处理这个k,你可以得到b[0]b[1]b[2]这个玩意儿,表示这个m进制的每一位是啥
你现在做出来了b0,那么你就在b[0]前面扔m个小的倒叙的,然后再后面扔一个最小的,再倒叙扔b[1]个倒叙的
这样你就得到了mb[0]+b[1]了,然后一直递归下去,你就构造出来了m进制的
经过计算,发现m=6的时候,恰好能够构造出来,所以就做出来了~
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int k;
int pri[maxn];
vector<int>p;
void init()
{
for(int i=2;i<maxn;i++)
{
if(pri[i]==0)
{
for(int j=i+i;j<maxn;j+=i)
pri[j]=1;
}
}
}
int cnt[maxn],tot=0;
int solve()
{
scanf("%d",&k);
if(k==1)
{
cout<<"1"<<endl;
cout<<"1"<<endl;
return 1;
}
if(k==2)
{
cout<<"2"<<endl;
cout<<"2 1"<<endl;
return 2;
}
p.clear();
tot=0;
while(k)
{
cnt[tot++]=k%6;
k/=6;
}
reverse(cnt+0,cnt+tot);
for(int i=cnt[0];i;i--)
p.push_back(i);
for(int i=1;i<tot;i++)
{
if(cnt[i]==0){
for(int j=0;j<p.size();j++)
p[j]+=6;
reverse(p.begin(),p.end());
for(int j=1;j<=6;j++)
p.push_back(j);
reverse(p.begin(),p.end());
continue;
}
for(int j=0;j<p.size();j++)p[j]+=6;
reverse(p.begin(),p.end());
for(int j=1;j<=6;j++)
p.push_back(j);
reverse(p.begin(),p.end());
for(int j=0;j<p.size();j++)p[j]+=(cnt[i]+i);
for(int j=1;j<=i;j++)p.push_back(j);
for(int j=cnt[i]+i;j>i;j--)
p.push_back(j);
}
cout<<p.size()<<endl;
for(int i=0;i<p.size();i++)
cout<<p[i]<<" ";
cout<<endl;
return p.size();
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
solve();
}
SnackDown Longest Increasing Subsequences 构造题的更多相关文章
- Longest Increasing Subsequences(最长递增子序列)的两种DP实现
一.本文内容 最长递增子序列的两种动态规划算法实现,O(n^2)及O(nlogn). 二.问题描述 最长递增子序列:给定一个序列,从该序列找出最长的 升序/递增 子序列. 特点:1.子序列不要 ...
- 【二分】【动态规划】Gym - 101156E - Longest Increasing Subsequences
求最长上升子序列方案数. 转载自:http://blog.csdn.net/u013445530/article/details/47958617,如造成不便,请博主联系我. 数组A包含N个整数(可能 ...
- 【Codeforces】Gym 101156E Longest Increasing Subsequences LIS+树状数组
题意 给定$n$个数,求最长上升子序列的方案数 根据数据范围要求是$O(n\log n)$ 朴素的dp方程式$f_i=max(f_j+1),a_i>a_j$,所以记方案数为$v_i$,则$v_i ...
- LintCode刷题笔记--Longest Increasing Subsequence
标签: 动态规划 描述: Given a sequence of integers, find the longest increasing subsequence (LIS). You code s ...
- 【刷题-LeetCode】300. Longest Increasing Subsequence
Longest Increasing Subsequence Given an unsorted array of integers, find the length of longest incre ...
- 673. Number of Longest Increasing Subsequence最长递增子序列的数量
[抄题]: Given an unsorted array of integers, find the number of longest increasing subsequence. Exampl ...
- LeetCode Number of Longest Increasing Subsequence
原题链接在这里:https://leetcode.com/problems/number-of-longest-increasing-subsequence/description/ 题目: Give ...
- LeetCode 673. Number of Longest Increasing Subsequence
Given an unsorted array of integers, find the number of longest increasing subsequence. Example 1: I ...
- 【LeetCode】673. Number of Longest Increasing Subsequence 解题报告(Python)
[LeetCode]673. Number of Longest Increasing Subsequence 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https:/ ...
随机推荐
- 嵌入式Linux截图工具gsnap移植与分析【转】
转自:http://blog.csdn.net/lu_embedded/article/details/53934184 版权声明:开心源自分享,快乐源于生活 —— 分享技术,传递快乐.转载文章请注明 ...
- 金融数据分析 - 利用 Tushare Pro 平台 获取金融数据
Tushare金融大数据开放社区 免费提供各类金融数据和区块链数据 , 助力智能投资与创新型投资. 详见 https://tushare.pro/
- poj 3372(找规律)
Candy Distribution Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6033 Accepted: 335 ...
- 百度Webuploader 大文件分片上传(.net接收)
前阵子要做个大文件上传的功能,找来找去发现Webuploader还不错,关于她的介绍我就不再赘述. 动手前,在园子里找到了一篇不错的分片上传的帖子,参考之后,踏出了第一步.此文记录我这次实践的点滴,仅 ...
- 易普优APS-3C行业解决方案助力国家智能制造示范车间实现高效计划排程
一. 项目背景 广东劲胜智能集团国家智能制造专项——移动终端金属加工智能制造新模式项目是2015年国家94家智能制1.造专项之一.本项目实施车间为金属CNC加工车间(下称“智能制造示范车间” ...
- tp5总结(四)
数据库 1.数据库配置 1-1.配置文件配置[http://ww:7070/tp5-3/public/] 1-2.Db::connect配置[数组和字符串方式][http://ww:7070/tp5- ...
- win7下docker环境搭建nginx+php-fpm+easyswoole开发环境
基础的环境已在文章nginx.php-fpm.swoole HTTP/TCP压测对比中搭建了,现在是在这个基础上在搭建easyswoole开发环境 主要要修改的地方是dnmp包里面的docker-co ...
- 洛谷P2525 Uim的情人节礼物·其之壱 [康托展开]
题目传送门 Uim的情人节礼物·其之壱 题目描述 情人节到了,Uim打算给他的后宫们准备情人节礼物.UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!). 为了维护他的后宫的 ...
- Alter GDG limit
//JOBCARD... //*-------------------------------------------------------------------* //* Alter GDG l ...
- Java还是程序员的金饭碗
可能会存在一种更快,更简单的编程语言,但就目前来说,根据Stack Overflow的最新统计,“传统”的编程语言依然在赚着大把的钱.在2013年,招聘程序员时,搜索最多的技能关键字是Java,几乎有 ...