zoukankan      html  css  js  c++  java
  • Atcoder Grand 012 C

    题意:

    构造一个字符串,使得这个字符串有只有n个形如AA这样的子序列。

     

    神TM构造题不会做,,

    我们构造一个长度为2*m的字符串,前m个是一个1-m的排列,后m个就是按顺序1-m。

    这样这个串里符合要求的子序列就是1-m排列中的最长上升子序列个数。

    定义函数f(x)表示构造一个最长上升子序列个数为x的字符串。

    如果$x\%2=1$,$f(x)=[len(f(x-1))+1]+f(x-1)$

    如果$x\%2=0$,$f(x)=f(x/2)+[len(f(x/2))+1]$

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll n;
    int l[1005],r[1005];
    int p1,p2,now;
    void solve(ll x)
    {
        if(x==1)return ;
        if(x%2==1)l[++p1]=++now,x--;
        r[++p2]=++now;
        solve(x/2);
    }
    int main()
    {
        cin>>n;
        solve(n+1);
        printf("%d
    ",now*2);
        for(int i=1;i<=p1;i++)cout<<now-l[i]+1<<' ';
        for(int i=p2;i>=1;i--)cout<<now-r[i]+1<<' ';
        for(int i=1;i<=now;i++)cout<<i<<' ';
        return 0;
    }

     

  • 相关阅读:
    关于《函数调用关键字》记忆恢复本
    进程一
    PE工具实现
    PE工具界面一
    PE各种操作
    汇编指令repne scas byte ptr es:[edi]
    Dialog
    按钮
    点和线的绘制一
    滚动条二
  • 原文地址:https://www.cnblogs.com/ezyzy/p/7685058.html
Copyright © 2011-2022 走看看