码迷,mamicode.com
首页 > 其他好文 > 详细

AGC 012 C - Tautonym Puzzle

时间:2018-07-13 18:54:27      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:puts   lin   efi   构造   bsp   div   阅读   一段   image   

题面在这里!

 

    神仙构造啊qwqwq。

    窝一开始只想到一个字符串长度是 O(log(N)^2) 的做法:可以发现一段相同的长度为n的字符串的贡献是 2^(n-1)-1 ,可以把它看成类二进制,枚举用了多少种字符,把n加上这个种类数,然后每种就可以看成一个二进制位啦,只要 n+种类数 这个数的二进制中1的个数 <= 种类数就可以构造啦,肯定是有解的(考虑种类数最多可以是100)。

 

    然鹅最后字符串长只能是200啊,,,,迷

    然后%了一发题解发现是一个神仙构造,窝也懒得说了直接贴上题解啦qwq,一段愉快的英文阅读!

 

技术分享图片

 

#include<bits/stdc++.h>
#define ll long long
using namespace std;

int n,a[205],L,R,now;
ll cnt;

inline void solve(){
	int i=40; L=101,R=L-1;
	for(;!((1ll<<i)&cnt);i--);
	for(i--;i>=0;i--){
		a[++R]=++now;
		if((1ll<<i)&cnt) a[--L]=++now;
	}
	
	n=R-L+1;
	for(int i=1;i<=n;i++) a[i]=a[i+L-1];
	for(int i=n+1;i<=n*2;i++) a[i]=i-n;
	n<<=1;
}

int main(){
	scanf("%lld",&cnt),cnt++;
	solve(),printf("%d\n",n);
	for(int i=1;i<=n;i++) printf("%d ",a[i]);
	puts("");
	return 0; 
}

  

AGC 012 C - Tautonym Puzzle

标签:puts   lin   efi   构造   bsp   div   阅读   一段   image   

原文地址:https://www.cnblogs.com/JYYHH/p/9306368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!