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 ...
随机推荐
- SciTech-BigDataAIML-ETL(Extract/Transform/Load): Airflow、Luigi、NiFi+Pandas 的 深度整合指南
https://hot.dawoai.com/posts/2025/python-etl-practical-airflow-luigi-deep-integration-guide/ Python ...
- MCU之Microchip PIC16F17146 Curiosity NANO Evaluation Kit申请与收到有感
申请到寄到已过去好长时间(三个月): 2023-04-22 在bbs.21ic.com提交发布申请: 2023-07-21 收到批准包裹. 对比十五年前,ADI美国模拟器件公司 与 TI美国德州仪器公 ...
- spring-ai 学习系列(6)-文生图
继续来学习spring-ai如何实现"文生图" 一.pom依赖 1 <dependency> 2 <groupId>org.springframework. ...
- 从登录到 Markdown:用 60 行 Python 批量抓取 Hydro OJ 题目
作者:jason 日期:2025-07-26 版权:wanwusangzhi 2024-2025 项目地址:https://github.com/wanwusangzhigit/hydro 1. 背景 ...
- Centos7设置开机启动界面:图形化or命令行
进入root模式下 1.获取当前默认界面 systemctl get-default 2.设置命令行界面 systemctl set-default multi-user.target 3.设置图形化 ...
- Integer缓存IntegerCache详解
Integer缓存IntegerCache详解 例子代码 public class IntegerCacheTest { public static void main(String[] args) ...
- 苹果容器Apple container是做什么用的?
一.Apple container是什么 container是苹果公司出的一款容器工具.以轻量级虚拟机方式创建.运行Linux容器.那么,Linux容器又是什么呢? Linux容器是一种特殊的进程 进 ...
- MyEMS 开源能源管理系统:基于 4G 无线传感网络的能源数据闭环管理方案
一.MyEMS 系统核心架构与技术特性 MyEMS 作为开源能源管理领域的标杆性解决方案,采用 Python 语言构建核心框架,依托 Django 后端与 React 前端技术栈实现跨平台兼容.其模 ...
- 【渲染流水线】[几何阶段]-[几何着色]以UnityURP为例
允许自定义增加和创建新图元,唯一一个能自定义增加新图元的着色器.(部分平台支持,移动端很多不支持.apple的metal不支持) [从UnityURP开始探索游戏渲染]专栏-直达 作用 基于图元生 ...
- 数据库分片(Sharding)及其优势与挑战;
数据库分片 概念:数据库分片(Sharding)是一种将大型数据库分割成多个较小的.相互独立的部分(称为分片)的技术,每个分片可以存储在不同的服务器上,从而实现数据的分布式存储和处理. 优势 提高性能 ...