GYM 100488 M.Construct a Permutation(构造)

    xiaoxiao2021-03-25  119

    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; }
    转载请注明原文地址: https://ju.6miu.com/read-11102.html

    最新回复(0)