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 333333
int 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;
}