题目链接

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的更多相关文章

  1. 【AtCoder Grand Contest 012C】Tautonym Puzzle [构造]

    Tautonym Puzzle Time Limit: 50 Sec  Memory Limit: 256 MB Description 定义一个序列贡献为1,当且仅当这个序列 由两个相同的串拼接而成 ...

  2. AtCoder Grand Contest 012 C:Tautonym Puzzle

    题目传送门:https://agc012.contest.atcoder.jp/tasks/agc012_c 题目翻译 如果一个字符串是好的,那么这个字符串的前半部分和后半部分肯定一模一样.比如\(a ...

  3. AT2363-[AGC012C]Tautonym Puzzle【构造】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2363 题目大意 给出\(n\),要求构造一个字符串\(s\),使得能够找出恰好\(n\)个子序列使得这个子序列 ...

  4. Atcoder Grand 012 C - Tautonym Puzzle

    题意: 构造一个字符串,使得这个字符串有只有n个形如AA这样的子序列. 神TM构造题不会做,, 我们构造一个长度为2*m的字符串,前m个是一个1-m的排列,后m个就是按顺序1-m. 这样这个串里符合要 ...

  5. AGC 012 C - Tautonym Puzzle

    题面在这里! 神仙构造啊qwqwq. 窝一开始只想到一个字符串长度是 O(log(N)^2) 的做法:可以发现一段相同的长度为n的字符串的贡献是 2^(n-1)-1 ,可以把它看成类二进制,枚举用了多 ...

  6. Tautonym Puzzle

    题意: 构造一个长度不超过200,数字不大于100的序列,使得合法子序列的个数恰好为N: 合法子序列是指一个长度为偶数的序列,前一半和后一半相等. 解法: 考虑这种构造方法 假设我们当前有序列为 $x ...

  7. AtCoder Grand Contest 012

    AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...

  8. 【AtCoder】AGC012

    AGC012 A - AtCoder Group Contest 从最后开始间隔着取就行 #include <bits/stdc++.h> #define fi first #define ...

  9. A♂G&C012

    A♂G&C012 A AtCoder Group Contest 从大到小sort后输出\(a_2+a_4+a_6+\ldots a_{2n}\) 好♂啊,只会背结论/kk B Splatte ...

随机推荐

  1. tidb测试环境安装,离线部署

    1.环境以及规划 机器:centos7.5 ; 文件系统为ext4:内存16g:cpu8核,共三个节点: ip hostname roles --- tidb tipd tikv --- tidb t ...

  2. 16、Java并发编程:Timer和TimerTask

    Java并发编程:Timer和TimerTask(转载) 下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer ...

  3. Mac下重置MySQL密码

    第一步要先停止掉mysql服务: brew services stop mysql 第二步查看mysql安装路径: brew info mysql //我这里是brew管理的所以我用brew查看mys ...

  4. PHP基础知识试题

    转载于:http://www.php.cn/toutiao-415599.html 1.PHP中传值与传引用的区别,什么时候传值,什么时候传引用? 按值传递:函数范围内对值任何改变在函数外部都会被忽略 ...

  5. ffmpeg 踩坑实录 近期使用总结(三)

    一.背景介绍 将ffmpeg运用到项目上已经有一段时间了,趁现在有空赶紧记下来. 二.技术点总结    2.1 实现方式 项目里面主要运用的形式是,在java端,调用操作系统的方法,并执行切片命令. ...

  6. Qt 将字符串转成16进制显示

    最近项目用到了需要将字符串转换成16进制显示.这玩意折腾了一上午. 首先,数据块内容 struct UserData { char Head[3] = {'X','J','J'}; char Flag ...

  7. Python序列之字符串 (str)

    作者博文地址:http://www.cnblogs.com/spiritman/ Python字符串的常用操作包括以下但不限于以下操作: 字符串的替换.删除.切片.复制.连接.比较.查找.分割等 以下 ...

  8. spark的数据结构 RDD——DataFrame——DataSet区别

    转载自:http://blog.csdn.net/wo334499/article/details/51689549 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接 ...

  9. react native中props的使用

    react native中props的使用 一.props的使用 1:父组件传递的方式 在子组件中可以用this.props访问到父组件传递的值 <View> <Text> { ...

  10. HDU 5501 The Highest Mark

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5501 The Highest Mark  Accepts: 32  Submissions: 193 ...