蒙自网站建设,自己怎么做彩票网站吗,wordpress lt,wordpress数据表位置正题
题目链接:https://www.luogu.com.cn/problem/AT2363 题目大意
给出nnn#xff0c;要求构造一个字符串sss#xff0c;使得能够找出恰好nnn个子序列使得这个子序列能划分成前后相等的两份。 要求∣s∣≤200|s|\leq 200∣s∣≤200#xff0c;字符集为[1,100][1,100][1,1…正题
题目链接: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的排列这样答案就是这个排列的上升子序列数。
这样就化成了一个很简单的构造了从小到大加加到前面就是111后面就是×2\times 2×2。 code
#includecstdio
#includecstring
#includealgorithm
#includequeue
#define ll long long
using namespace std;
ll n,cnt,flag;dequell q;
signed main()
{scanf(%lld,n);n;for(ll i63;i0;i--){if(flag){cnt;q.push_back(cnt);}if((ni)1){if(flag)cnt,q.push_front(cnt);flag1;}}printf(%lld\n,cnt*2);for(ll i1;icnt;i)printf(%lld ,i);for(ll i1;icnt;i)printf(%lld ,q.front()),q.pop_front();return 0;
}