AT2363-[AGC012C]Tautonym Puzzle【构造】
生活随笔
收集整理的這篇文章主要介紹了
AT2363-[AGC012C]Tautonym Puzzle【构造】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目鏈接:https://www.luogu.com.cn/problem/AT2363
題目大意
給出nnn,要求構造一個字符串sss,使得能夠找出恰好nnn個子序列使得這個子序列能劃分成前后相等的兩份。
要求∣s∣≤200|s|\leq 200∣s∣≤200,字符集為[1,100][1,100][1,100]
1≤n≤10121\leq n\leq 10^{12}1≤n≤1012
解題思路
很妙的想法,我們把sss分成兩半,一半是1~x1\sim x1~x,然后后一半是一個1~x1\sim x1~x的排列,這樣答案就是這個排列的上升子序列數。
這樣就化成了一個很簡單的構造了,從小到大加,加到前面就是+1+1+1,后面就是×2\times 2×2。
code
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define ll long long using namespace std; ll n,cnt,flag;deque<ll> q; signed main() {scanf("%lld",&n);n++;for(ll i=63;i>=0;i--){if(flag){cnt++;q.push_back(cnt);}if((n>>i)&1){if(flag)cnt++,q.push_front(cnt);flag=1;}}printf("%lld\n",cnt*2);for(ll i=1;i<=cnt;i++)printf("%lld ",i);for(ll i=1;i<=cnt;i++)printf("%lld ",q.front()),q.pop_front();return 0; }總結
以上是生活随笔為你收集整理的AT2363-[AGC012C]Tautonym Puzzle【构造】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 买了苹果电脑却不会用买了苹果电脑却不会用
- 下一篇: 闲置台式电脑怎么利用台式电脑如何处理