Atcoder Grand 012 C - Tautonym Puzzle
题意:
构造一个字符串,使得这个字符串有只有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]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #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\n" ,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; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步