[AT2363] [agc012_c] Tautonym Puzzle
题目链接
AtCoder:https://agc012.contest.atcoder.jp/tasks/agc012_c
洛谷:https://www.luogu.org/problemnew/show/AT2363
题目大意
洛谷好像没有翻译,窝翻译了下顺便交了一发洛谷
我们称一个字符串\(x\)是好的当且仅当它满足一下条件:
- \(x\)可以被表示为另外一个串\(y\)复制一遍得到,即\(x=\overline {yy}\)。
举个例子:'aa'
和'bubobubo'
是好的,'a'
,'abcabcabc'
和'abba'
不是。
现在要求一个串\(s\)满足下列条件,可以证明这个串存在:
\(|s|\leqslant 200\)
字符集大小为\(100\),即每个字符用\([1,100]\)的整数表示。
在\(s\)的所有的\(2^{|s|}\)个子序列中,恰好有\(N\)个串是好的,其中\(N\)是给出的。
Solution
构造题...窝太菜了想不出来...
一开始想搞一个二进制拆分,一段一段的分,每段字符相同,但是这样串长是\(O(\log ^2 n)\)的,\(\rm WA\)了近一半的点...
正解很简洁,也很巧妙:
注意到\(\rm good \, string\)的性质,我们可以在串的右半段构造一个严格上升的串,在左边构造一个右边串的排列,那么方案数就是左边串的上升子序列个数。
我们从小到大往左边加字符,设空串也是一种情况,那么当前字符可以放最前面或最后面:
- 当前字符放最前面,那么我们的方案数会\(+1\)。
- 放最后面,方案数\(\times 2\)。
那么我们可以构造\(n+1\)的每个二进制位,串长为\(O(2\log n)\),复杂度也是\(O(\log n)\)。
#include<bits/stdc++.h>
using namespace std;
#define int long long
void read(int &x) {
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}
void print(int x) {
if(x<0) putchar('-'),x=-x;
if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}
#define lf double
#define ll long long
#define pb push_back
const int maxn = 1e5+10;
const int inf = 1e9;
const lf eps = 1e-8;
int n;
vector<int > s,t;
signed main() {
read(n);int p=101;n++;
while(n>1) {if(n&1) t.pb(--p),n--;else s.pb(--p),n>>=1;}
int m=s.size()+t.size();printf("%lld\n",m<<1);
for(int i=0;i<(int)t.size();i++) printf("%lld ",t[i]);
for(int i=s.size()-1;~i;i--) printf("%lld ",s[i]);
for(int i=100-m+1;i<=100;i++) printf("%lld ",i);
return 0;
}
[AT2363] [agc012_c] Tautonym Puzzle的更多相关文章
- 【AtCoder Grand Contest 012C】Tautonym Puzzle [构造]
Tautonym Puzzle Time Limit: 50 Sec Memory Limit: 256 MB Description 定义一个序列贡献为1,当且仅当这个序列 由两个相同的串拼接而成 ...
- AtCoder Grand Contest 012 C:Tautonym Puzzle
题目传送门:https://agc012.contest.atcoder.jp/tasks/agc012_c 题目翻译 如果一个字符串是好的,那么这个字符串的前半部分和后半部分肯定一模一样.比如\(a ...
- AT2363-[AGC012C]Tautonym Puzzle【构造】
正题 题目链接:https://www.luogu.com.cn/problem/AT2363 题目大意 给出\(n\),要求构造一个字符串\(s\),使得能够找出恰好\(n\)个子序列使得这个子序列 ...
- Atcoder Grand 012 C - Tautonym Puzzle
题意: 构造一个字符串,使得这个字符串有只有n个形如AA这样的子序列. 神TM构造题不会做,, 我们构造一个长度为2*m的字符串,前m个是一个1-m的排列,后m个就是按顺序1-m. 这样这个串里符合要 ...
- AGC 012 C - Tautonym Puzzle
题面在这里! 神仙构造啊qwqwq. 窝一开始只想到一个字符串长度是 O(log(N)^2) 的做法:可以发现一段相同的长度为n的字符串的贡献是 2^(n-1)-1 ,可以把它看成类二进制,枚举用了多 ...
- Tautonym Puzzle
题意: 构造一个长度不超过200,数字不大于100的序列,使得合法子序列的个数恰好为N: 合法子序列是指一个长度为偶数的序列,前一半和后一半相等. 解法: 考虑这种构造方法 假设我们当前有序列为 $x ...
- AtCoder Grand Contest 012
AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...
- 【AtCoder】AGC012
AGC012 A - AtCoder Group Contest 从最后开始间隔着取就行 #include <bits/stdc++.h> #define fi first #define ...
- A♂G&C012
A♂G&C012 A AtCoder Group Contest 从大到小sort后输出\(a_2+a_4+a_6+\ldots a_{2n}\) 好♂啊,只会背结论/kk B Splatte ...
随机推荐
- 【JUC源码解析】PriorityBlockingQueue
简介 基于数据结构堆实现的线程安全的无界队列,这个堆的内存结构是数组,结合了数组和二叉树的特点. 堆 以下内容参考<编程珠玑>和<算法导论>有关堆的章节. 数据结构 堆是用来表 ...
- nginx基础配置加基础实战演示
目录 基本配置 设置用户 工作衍生进程数 错误日志存放路径 pid文件存放路径 设置最大连接数 http->server gzip 字符编码 nginx的基本格式 实战配置 虚拟主机配置 开始配 ...
- 2018 ACM-ICPC World Finals - Beijing F.Go with the Flow
先枚举所有的列长度 对于每种列长度,然后里面用dp算 #include <algorithm> #include <cmath> #include <cstdio> ...
- vue route.go 载入刷新
vue route 重新载入刷新: this.$router.go({path : 'path' , query: { param: this.param} })
- Spark之spark shell
前言:要学习spark程序开发,建议先学习spark-shell交互式学习,加深对spark程序开发的理解.spark-shell提供了一种学习API的简单方式,以及一个能够进行交互式分析数据的强大工 ...
- HP Vitrual Connect 配置快速参考
使用任意浏览器,在地址栏输入VC的管理地址(如果不知道VC的管理地址请从OA中进入) 输入用户名和密码登入VC,验证成功后将进入VM的配置向导 点击"Next"继续,将先进行Dom ...
- c# ms chart 控件使用方法
第一个简单的chart: spline// Create new data series and set it's visualattributes Series series = new ...
- redis利用key计时与计数
计时 Setex 命令为指定的 key 设置值及其过期时间.如果 key 已经存在, SETEX 命令将会替换旧的值 基本命令: redis 127.0.0.1:6379> SETEX KEY_ ...
- Croc Champ 2013 - Round 1 E. Copying Data 线段树
题目链接: http://codeforces.com/problemset/problem/292/E E. Copying Data time limit per test2 secondsmem ...
- erlang转化中文为url
今天使用http get 方法时,参量中有中文而导致出错. 例如http://abc.com/abc?arg=中文,在erlang使用http:request方法失败. 后来查了url的规范,url中 ...