GYM 100488 M.Construct a Permutation(构造)

来源:互联网 发布:java 手动回收垃圾 编辑:程序博客网 时间:2024/06/05 05:42

Description
给出两个正整数a和b,要其构造一个序列使得该序列的最长严格上升子序列和最长严格下降子序列长度分别为a和b
Input
两个正整数a和b(1<=a,b<=500)
Output
输出合法序列
Sample Input
2 1
Sample Output
2
1 2
Solution
构造b段序列拼接一起,每段都是一个长度为a的严格上升列,且前一段最小值比后一段最大值还大,显然这是一个合法解
Code

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define maxn 333333int ans[maxn],a,b;int main(){    while(~scanf("%d%d",&a,&b))    {        printf("%d\n",a*b);        for(int i=1;i<=a;i++)            for(int j=i*b,k=(i-1)*b+1;j>(i-1)*b;j--,k++)                ans[j]=k;        for(int i=1;i<=a*b;i++)            printf("%d%c",ans[i],i==a*b?'\n':' ');     }    return 0;}
0 0
原创粉丝点击