AT_agc012_c [AGC012C] Tautonym Puzzle 题目分析
题目
AT_agc012_c [AGC012C] Tautonym Puzzle
题目描述
当字符串 $ x $ 满足以下条件时,称 $ x $ 为好字符串。
- 条件:$ x $ 可以表示为某个长度不少于 $ 1 $ 的字符串 $ y $ 重复两次所得的字符串 $ yy $。
例如,aa、bubobubo 等是好字符串,而空字符串、a、abcabcabc、abba 等都不是好字符串。
“ワシ”与猫头鹰设计了关于好字符串的谜题。请找出一个满足下列条件的字符串 $ s $。在本题的约束条件下,一定存在这样的字符串。
- $ 1\leq |s|\leq 200 $
- $ s $ 仅由用 $ 1 $ 至 $ 100 $ 的整数表示的 $ 100 $ 种字符构成。
- $ s $ 的 $ 2^{|s|} $ 个子序列中,成为好字符串的子序列有 $ N $ 个。
题目分析
这显然是一道构造题目,高质量的构造题目。
我们注意到填什么似乎并不重要,重要的是种类不同。
因此有 \(200\) 个位置,我们先用 \(100\) 个位置从左到右依次放置 \(1,\dots,100\)。
我们考虑后半部分怎么与前面的匹配出 \(n\) 个合法的。
首先考虑一个最大的 \(k\) 使得 \(2^k-1\leq n\),将 \(n\) 分为 \(2^k-1\) 和 \(rest=n-2^k+1\) 两个部分进行计算。
第一个部分,我们可以只需要按顺序放置 \(k\) 个数就可以了,至于是什么得看第二个部分。
对于第二个部分,我们试图将其与 \(rest\) 的二进制扯上关系,如果说第 \(x\) 位(从后往前,从 \(0\) 开始)为 \(1\),我们希望多产生 \(2^x\) 的贡献,怎么弄呢?
要产生 \(2^x\) 的贡献其中一个方法就是当前在末尾放置一个数 \(a\),使得前面比它小的数有 \(x\) 个即可。
这个的方法不同,其中一种比较简单的方法是:前面直接放置偶数就可以了(\(\{2,4,6,\dots\}\)),然后后面补充奇数,比如说对于 \(rest=(101)_2\),得到后半部分的序列的第二部分为:\(\{5,1\}\)。
注意遍历的时候要从高位开始遍历,否则小奇数对大奇数也有可能产生贡献。
真是一道好题!
代码
时间复杂度 \(\mathcal{O}(len)\),其中 \(len\) 为最后答案的长度。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define int long long
// #define N
using namespace std;
int n;
vector<int> ans;
signed main(){
cin >> n;
// cout << 200 << '\n';
// for (int i = 1;i <= 100;i ++) cout << i << ' ';
for (int i = 1;i <= 100;i ++) ans.push_back(i);
int k = 0;
for (;(1ll << k + 1) - 1ll <= n;k ++);
for (int i = 1;i <= k;i ++) ans.push_back(i * 2);
int rest = n - (1ll << k) + 1ll;
for (int i = k - 1;i >= 0;i --)
if ((rest >> i) & 1) ans.push_back(i * 2 + 1);
cout << ans.size() << '\n';
for (auto i : ans) cout << i << ' ';
return 0;
}
AT_agc012_c [AGC012C] Tautonym Puzzle 题目分析的更多相关文章
- 【AtCoder Grand Contest 012C】Tautonym Puzzle [构造]
Tautonym Puzzle Time Limit: 50 Sec Memory Limit: 256 MB Description 定义一个序列贡献为1,当且仅当这个序列 由两个相同的串拼接而成 ...
- SCTF 2014 pwn题目分析
因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目.主防项目目前先搁置起来了,等比赛打完再去搞吧. 这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很 ...
- 路由器漏洞复现分析第三弹:DVRF INTRO题目分析
这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘. 本文通过练习DVRF 中INTRO 部分的题目来学习下MIPS 结构下的各种内存攻击. DVRF: ...
- 二分查找总结及部分Lintcode题目分析 2
Search in a big sorted array,这个比之前的二分法模板多了一个很不同的特性,就是无法知道一个重要的条件end值,也是题目中强调的重点 The array is so big ...
- 【算法】题目分析:Aggressive Cow (POJ 2456)
题目信息 作者:不详 链接:http://poj.org/problem?id=2456 来源:PKU JudgeOnline Aggressive cows[1] Time Limit: 1000M ...
- *CTF babyarm内核题目分析
本文从漏洞分析.ARM64架构漏洞利用方式来讨论如何构造提权PoC达到读取root权限的文件.此题是一个ARM64架构的Linux 5.17.2 版本内核提权题目,目的是读取root用户的flag文件 ...
- pat乙级:模拟链表问题(汇总,包含所有pat中链表题目分析)
更新:优化文章结构,增加了部分内容如(1110区块反转)和自己代码和他人代码分析.看完你就懂了 转载请注明出处和链接地址:(https://www.cnblogs.com/ahappyfool/p/1 ...
- SCJP_104——题目分析(5)
18. public class Test { public static void add3(Integer i) { int val=i.intvalue(); val+=3; i=new Int ...
- SCJP_104——题目分析(2)
3. public class IfTest{ public static void main(String args[]){ int x=3; int y=1; if(x=y) System.out ...
- SCJP_104——题目分析(1)
1.1) public class ReturnIt{2) returnType methodA(byte x, double y){3) return (short)x/y*2;4) }5) }wh ...
随机推荐
- lim x→c f(x) = L数学语言:∀ ϵ>0, ∃ δ>0 S.T. for all x≠c, if |x-c|<δ, then |f(x)-L|<ϵ 常用记号: “∃ ”:“存在”或“可以找到”,“∀ ”: “对于任意的”或“对于每一个”, maxS:数集S极大值, minS:数集S极小值, supS:上确界(上界最小值), infS下确界(下界最大值)
实数集Completeness Axiom(连续性公理) Q: 谬论: "实数集上, 怎么求出点A"相邻"的那一点, 或A点的"下一点"? 或 &qu ...
- SciTech-Logic:逻辑学-Introduction to Logic: Irvine - 5.5 传统对当方阵
SciTech-Logic:逻辑学-Introduction to Logic: Irvine - 5.5 传统对当方阵 5.5 传统对当方阵 到目前为止,对直言命题的分析使我们能够进一步研究这些直言 ...
- win10专业版usb接口被禁用的问题
有深度系统的小伙伴,在win10专业版插入U盘,却没有任何反应,仔细检查发现USB接口被禁用了,不论插哪个USB口都无法正常使用的问题.那如何解除usb接口禁用呢?本文中,深度技术小编就来分享详细的处 ...
- IPD 项目管理软件工具对比:2025 年最佳选择指南
在当今竞争激烈的研发环境中,选择合适的ipd项目管理软件对于提高团队效率和项目成功率至关重要.随着技术的不断进步,ipd项目管理软件工具也在不断演进,为研发团队提供更加智能和全面的解决方案.本文将为您 ...
- T527的GPU-Mali-G57驱动与weston图形界面
盈鹏飞嵌入式最近发布的基于全志A527/T527的开发板-AHD-X527,以下演示内容在开发板上运行通过, 以下是盈鹏飞嵌入式AHD-X527开发板的简要介绍: 产品功能: 产品特性 : 采用All ...
- 虚拟机-Linux开发板交叉编译问题记录
遇到一堆很久之前见过的问题,重新解决一次. 1.虚拟机没法上网 发现虚拟机浏览器上不了网,运行ifconfig查看,发现要么没有IP地址,要么只有IPv6的地址.最后发现是昨天VMware卡死了,启动 ...
- 不懂Modbus的人干不了能源管理
不了解Modbus的人难以从事能源管理工作.这是因为Modbus在能源管理系统中扮演着至关重要的角色,它是一种广泛应用于工业自动化领域的通信协议,特别是在能源管理.楼宇自动化等领域发挥着关键作用.M ...
- AI绘画:关键词指南
公式 主题(加下面的) + 环境(背景,周围) + 气氛(烈日下,雾蒙蒙,恐怖的,风暴席卷的) + 灯光(顶光,雾气光,漫反射的,强对比的) + 色彩(低饱和度,颜色鲜艳的,花里胡哨的,强反射的主色调 ...
- K8S容器内部署相关应用的UID及权限设置
1.grafana 一.UID:472 通过kubeVsphere进入正常运行后的容器内查看得知: 如果容器挂载的PVC所在的PV类型为HostPath,则需要找到对应的PV HostPath路径,赋 ...
- JavaScript 多人协作的“修罗场”:如何优雅地规避函数重名问题?
从刀耕火种的全局变量到模块化工业革命,探索前端协作的进化之路 引言 在多人协作的 JavaScript 项目中,你是否经历过这样的场景:明明只添加了一个小功能,却导致整个页面的弹窗不再工作?经过数小时 ...