AtCoder Grand Contest 012 C:Tautonym Puzzle
题目传送门:https://agc012.contest.atcoder.jp/tasks/agc012_c
题目翻译
如果一个字符串是好的,那么这个字符串的前半部分和后半部分肯定一模一样。比如\(aa\)与\(bubobubo\)就是好的串,而空串,\(a\)与\(abcabcabc\)以及\(abba\)就不是好的。现在给你一个小于等于\(10^{12}\)的数字\(N\),要你求出一个字符串\(s\),使得这个串的\(2^{len}-1\)个子串里刚好有\(N\)个子串是好的。要求\(len\leqslant 200\)。
题解
我们先钦点空串是好的,\(s=X+Y\),\(X\)与\(Y\)分别是子串里只有空串是好串的字符串。假设\(c\)并没有出现在\(s\)里,我们用两种方式将\(c\)添加进\(s\)里去:
第一种:\(s'=cX+Yc\),这样的话\(s'\)的子串里好串的数量会比\(s\)里多\(1\)。
第二种:\(s'=Xc+Yc\),这样的话\(s'\)的子串里好串的数量会比\(s\)的多一倍。
只需要加一和乘二两种操作就可以凑出所有的数,我们把\(N\)二进制分解一下用双端队列搞搞就可以了。
时间复杂度:\(O(logN)\)
空间复杂度:\(O(len)\)
代码如下:
#include <deque>
#include <cstdio>
using namespace std;
typedef long long ll;
int m,num;
deque<int> s1,s2;
deque<int>::iterator it;
ll read() {
ll x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
int main() {
ll n=read()+1;//以为空串也是好串,所以这里要加一
for(ll i=1;i<=n;i<<=1)m++;
for(int i=m-2;~i;i--) {//初始有一个空串是好串,m-2是n的第二高的二进制位
s1.push_back(++num),s2.push_back(num);
if((n>>i)&1)s1.push_front(++num),s2.push_back(num);
}
printf("%d\n",(int)(s1.size()+s2.size()));
for(it=s1.begin();it!=s1.end();it++)
printf("%d ",(*it));
for(it=s2.begin();it!=s2.end();it++)
printf("%d ",(*it));
return 0;
}
AtCoder Grand Contest 012 C:Tautonym Puzzle的更多相关文章
- AtCoder Grand Contest 012 D:Colorful Balls
题目传送门:https://agc012.contest.atcoder.jp/tasks/agc012_d 题目翻译 给你一排一共\(N\)个球,每个球有一个颜色\(c_i\)和一个重量\(w_i\ ...
- AtCoder Grand Contest 012
AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...
- AtCoder Grand Contest 012 A
A - AtCoder Group Contest Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statem ...
- AtCoder Grand Contest 012 A - AtCoder Group Contest(贪心)
Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement There are 3N participa ...
- AtCoder Grand Contest 009 D:Uninity
题目传送门:https://agc009.contest.atcoder.jp/tasks/agc009_d 题目翻译 定义只有一个点的树权值为\(0\),若干棵(可以是\(0\)棵)权值为\(k\) ...
- AtCoder Grand Contest 009 E:Eternal Average
题目传送门:https://agc009.contest.atcoder.jp/tasks/agc009_e 题目翻译 纸上写了\(N\)个\(1\)和\(M\)个\(0\),你每次可以选择\(k\) ...
- AtCoder Grand Contest 004 C:AND Grid
题目传送门:https://agc004.contest.atcoder.jp/tasks/agc004_c 题目翻译 给你一张网格图,指定的格子是紫色的,要求你构造出两张网格图,其中一张你可以构造一 ...
- AtCoder Grand Contest 014 D:Black and White Tree
题目传送门:https://agc014.contest.atcoder.jp/tasks/agc014_d 题目翻译 给你一棵树,每次任选一个点染色,先手染白色,后手染黑色.如果最后存在一个白色的点 ...
- AtCoder Grand Contest 028 A:Two Abbreviations
题目传送门:https://agc028.contest.atcoder.jp/tasks/agc028_a 题目翻译 给你两个串\(s\)与\(t\),长度分别为\(n,m\).问你存不存在一个串长 ...
随机推荐
- 最新ssh2构架
构架要求: 1.最新ssh2jar包. 2.使用全注解. 3.给锁机制 4.缓存. 5.使用权限构架. 6. 前台构架用bootstraps. 今天任务: 搭建php环境.看代码.整理ssh2架构. ...
- asp .net 为图片添加图片水印 .
首先写好一个写入图片水印的类,先创建一个ImageWriter类库 (该类中有包含枚举类型和方法) using System; using System.Collections.Generic; ...
- Solaris磁盘配额
磁盘配额:就跟汽车行驶速度一样.我们设定. 添加rq标志,使其支持配额功能. 命令:quota ,打开就是quotaon 对ZFS文件系统进行设置配额: 当设置quota=none 则可以取消配额设置 ...
- python(25)- 面向对象补充Ⅰ
一.如何使用类 1.实例化:创建对象 类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征. 例子一 x=int(10) print(x) python中一切 ...
- MyEclipse 设置智能提示
choice 1: -->window→Preferences→Java→Editor→Content Assist, --->将Auto activation delay 的数值改为一个 ...
- __del__删除方法
class dog: def __del__(self): print("删除机制被调用了...") dog1 = dog() del dog1 #在这里是先删除掉了,所以就去上面 ...
- AngularJs + html 5 实现 裁剪上传
直接上代码 directive.js app.directive('fileUploadersm', function () { return { restrict: 'E', transclude: ...
- Active Directory虚拟机搭建域控服务器环境
前言 还是和上一章一样,痛苦过后还是记录下给后来人提供便利为妙. 虚拟机选择:建议Hyper-V或者VMware 系统选择:建议WIindows Server 2003及以上 我这里是使用VMware ...
- memcache及其telnet命令使用详解
1.启动Memcache 常用参数memcached 1.4.3-p <num> 设置端口号(默认不设置为: 11211)-U <num> UDP监听端口 ...
- springboot实战--笔记
由于这本书看过一遍,所以这里是二次复习,记录的东西比较少,就不分章节了. 共12章,524页,预计时间是18h 第一章 spring基础: 第二章 spring常用配置: bean的Scope:sin ...