【AtCoder Grand Contest 012C】Tautonym Puzzle [构造]
Tautonym Puzzle
Time Limit: 50 Sec Memory Limit: 256 MB
Description
Input
一行一个n。
Output
第一行为长度len,表示你构造出的序列长度。
第二行为你构造出的序列。
Sample Input
7
Sample Output
4
1 1 1 1
HINT
n <= 1e12
Solution
构造题到恰好为n的。一般有两种方法:
1. 可以构造出2^n,并且每部分互不影响;
2. 有方法添加若干元素使得原有答案*2或+1。
我们先考虑第一种方法。
显然我们把 n 化为二进制。并且发现连续 x 个相同的数提供的贡献为2^(x-1)-1,并且若干个连续的不影响。
这样 s 需要1+2+……+log2(n)+(log2(n) * 2)(用于补1),极限是900。不能满足条件。
我们再考虑第二种方法。
s<=200,权值<=100。长度有5 * log2(n)可用,权值有2 * log2(n)可用。
先考虑这样一个问题:
<p1,p2,…,pk>已经是一个排列了,我们在后面加上<1,2,…,k>之后的贡献是多少。
显然,此时贡献为:<p1,p2,…,pk>的上升序列的个数。
那么我们把问题转化为:构造一个上升序列个数为n的排列。
假设我们原来的排列<p1,p2,…,pk>已经x个上升序列了,现在填入k+1。
显然,在前面填一个k+1贡献会变为:x+1。完成了+1部分。
显然,在最后填一个k+1贡献会变为:x*2+1,这里多了一个+1。怎么办呢?
显然一开始是0,经过3次操作:0*2+1=1,1*2+1=3,3*2+1=7;
假设一开始是1,经过3次操作:1*2=2,2*2=4,4*2=8。
发现我们如果将初值1的话,我们每次x*=2,最后再-1和原来的效果是一样的。这样就完成了*2部分。
最后用一个递归即可。
Code
- #include<iostream>
- #include<string>
- #include<algorithm>
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<cmath>
- #include<queue>
- using namespace std;
- typedef long long s64;
- const int ONE = ;
- int get()
- {
- int res = , Q = ; char c;
- while( (c = getchar()) < || c > )
- if(c == '-') Q = -;
- if(Q) res = c - ;
- while( (c = getchar()) >= && c <= )
- res = res * + c - ;
- return res * Q;
- }
- s64 n;
- int now;
- deque <int> q;
- void Solve(s64 n)
- {
- if(n == ) return;
- if(n & ) Solve(n - ), q.push_front(++now);
- else Solve(n / ), q.push_back(++now);
- }
- int main()
- {
- cin >> n;
- Solve(++n);
- printf("%d\n", now << );
- while(!q.empty())
- printf("%d ", q.front()), q.pop_front();
- for(int i = ; i <= now; i++)
- printf("%d ", i);
- }
【AtCoder Grand Contest 012C】Tautonym Puzzle [构造]的更多相关文章
- Atcoder Grand 012 C - Tautonym Puzzle
题意: 构造一个字符串,使得这个字符串有只有n个形如AA这样的子序列. 神TM构造题不会做,, 我们构造一个长度为2*m的字符串,前m个是一个1-m的排列,后m个就是按顺序1-m. 这样这个串里符合要 ...
- AtCoder Grand Contest 012
AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...
- AtCoder Grand Contest 031 简要题解
AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...
- AtCoder Grand Contest 010
AtCoder Grand Contest 010 A - Addition 翻译 黑板上写了\(n\)个正整数,每次会擦去两个奇偶性相同的数,然后把他们的和写会到黑板上,问最终能否只剩下一个数. 题 ...
- AtCoder Grand Contest 008
AtCoder Grand Contest 008 A - Simple Calculator 翻译 有一个计算器,上面有一个显示按钮和两个其他的按钮.初始时,计算器上显示的数字是\(x\),现在想把 ...
- AtCoder Grand Contest 007
AtCoder Grand Contest 007 A - Shik and Stone 翻译 见洛谷 题解 傻逼玩意 #include<cstdio> int n,m,tot;char ...
- AtCoder Grand Contest 006
AtCoder Grand Contest 006 吐槽 这套题要改个名字,叫神仙结论题大赛 A - Prefix and Suffix 翻译 给定两个串,求满足前缀是\(S\),后缀是\(T\),并 ...
- AtCoder Grand Contest 004
AtCoder Grand Contest 004 A - Divide a Cuboid 翻译 给定一个\(A*B*C\)的立方体,现在要把它分成两个立方体,求出他们的最小体积差. 题解 如果有一条 ...
- AtCoder Grand Contest 002
AtCoder Grand Contest 002 A - Range Product 翻译 告诉你\(a,b\),求\(\prod_{i=a}^b i\)是正数还是负数还是零. 题解 什么鬼玩意. ...
随机推荐
- linux的桌面介绍
一:linux桌面环境 1. X Windows桌面环境 X Windows软件是图形显示的核心部分,是直接和PC上的显卡及显示器打交道的底层程序,它控制着linux程序如何在电脑上显示出漂亮的窗口和 ...
- pxe前期接入H3C交换机网络准备
环境:一个装机vlan3010,一个业务vlan,将接入交换机的下联,上联设置好vlan 如果服务器一直出于dhcp状态,有可能是交换机到服务器的光纤线路有问题,建议在交换机查看端口是否是down的. ...
- php单例模式 (转
假设我们需要写一个类用来操作数据库,并同时满足以下要求: ①SqlHelper类只能有一个实例(不能多)②SqlHelper类必须能够自行创建这个实例③必须自行向整个系统提供这个实例,换句话说:多个对 ...
- SpringBoot(十三)_springboot上传Excel并读取excel中的数据
今天工作中,发现同事在整理数据,通过excel上传到数据库.所以现在写了篇利用springboot读取excel中的数据的demo.至于数据的进一步处理,大家肯定有不同的应用场景,自行修改 pom文件 ...
- 开发者应该掌握的Java代码优化技能
就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了. 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对 ...
- HDU4745——Two Rabbits——2013 ACM/ICPC Asia Regional Hangzhou Online
这个题目虽然在比赛的时候苦思无果,但是赛后再做就真的是个水题,赤果果的水题. 题目的意思是给n个数构成的环,两只兔子从任一点开始分别顺逆时针跳,每次可以调到任意一个数(最多不会跳过一圈). 求最多能跳 ...
- Robot Framework 的安装配置和简单的实例介绍
Robot Framework 介绍 Robot Framework 是一款基于 Python 的功能自动化测试框架.它具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进 ...
- js复制内容到剪切板
注意第一部分的内容不兼容Safari,全兼容的请使用第二部分方法 第一部分 查看demo请点 这里. 原生js复制指定内容到剪切板,超简单的实现方式, 实现思路如下: 1.创建一个input,把想要 ...
- 字符串使用replaceAll()方法报异常
对字符串使用replaceAll()方法替换 * ? + / | 等字符的时候会报以下异常 Dangling meta character '*' near index 0 这主要是因为这些符号在正则 ...
- NAT alg 和 ASPF
NAT alg 和 ASPF 参考:https://handbye.cn/719.html 来源:https://www.jianshu.com/p/8a8eb36eef7d NAT的部署已经在企业网 ...