题目

AT_agc012_c [AGC012C] Tautonym Puzzle

题目描述

当字符串 $ x $ 满足以下条件时,称 $ x $ 为好字符串

  • 条件:$ x $ 可以表示为某个长度不少于 $ 1 $ 的字符串 $ y $ 重复两次所得的字符串 $ yy $。

例如,aabubobubo 等是好字符串,而空字符串、aabcabcabcabba 等都不是好字符串。

“ワシ”与猫头鹰设计了关于好字符串的谜题。请找出一个满足下列条件的字符串 $ 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 题目分析的更多相关文章

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

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

  2. SCTF 2014 pwn题目分析

    因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目.主防项目目前先搁置起来了,等比赛打完再去搞吧. 这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很 ...

  3. 路由器漏洞复现分析第三弹:DVRF INTRO题目分析

    这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘. 本文通过练习DVRF 中INTRO 部分的题目来学习下MIPS 结构下的各种内存攻击. DVRF: ...

  4. 二分查找总结及部分Lintcode题目分析 2

    Search in a big sorted array,这个比之前的二分法模板多了一个很不同的特性,就是无法知道一个重要的条件end值,也是题目中强调的重点 The array is so big ...

  5. 【算法】题目分析:Aggressive Cow (POJ 2456)

    题目信息 作者:不详 链接:http://poj.org/problem?id=2456 来源:PKU JudgeOnline Aggressive cows[1] Time Limit: 1000M ...

  6. *CTF babyarm内核题目分析

    本文从漏洞分析.ARM64架构漏洞利用方式来讨论如何构造提权PoC达到读取root权限的文件.此题是一个ARM64架构的Linux 5.17.2 版本内核提权题目,目的是读取root用户的flag文件 ...

  7. pat乙级:模拟链表问题(汇总,包含所有pat中链表题目分析)

    更新:优化文章结构,增加了部分内容如(1110区块反转)和自己代码和他人代码分析.看完你就懂了 转载请注明出处和链接地址:(https://www.cnblogs.com/ahappyfool/p/1 ...

  8. SCJP_104——题目分析(5)

    18. public class Test { public static void add3(Integer i) { int val=i.intvalue(); val+=3; i=new Int ...

  9. SCJP_104——题目分析(2)

    3. public class IfTest{ public static void main(String args[]){ int x=3; int y=1; if(x=y) System.out ...

  10. SCJP_104——题目分析(1)

    1.1) public class ReturnIt{2) returnType methodA(byte x, double y){3) return (short)x/y*2;4) }5) }wh ...

随机推荐

  1. 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 ...

  2. MCU之Microchip PIC16F17146 Curiosity NANO Evaluation Kit申请与收到有感

    申请到寄到已过去好长时间(三个月): 2023-04-22 在bbs.21ic.com提交发布申请: 2023-07-21 收到批准包裹. 对比十五年前,ADI美国模拟器件公司 与 TI美国德州仪器公 ...

  3. spring-ai 学习系列(6)-文生图

    继续来学习spring-ai如何实现"文生图" 一.pom依赖 1 <dependency> 2 <groupId>org.springframework. ...

  4. 从登录到 Markdown:用 60 行 Python 批量抓取 Hydro OJ 题目

    作者:jason 日期:2025-07-26 版权:wanwusangzhi 2024-2025 项目地址:https://github.com/wanwusangzhigit/hydro 1. 背景 ...

  5. Centos7设置开机启动界面:图形化or命令行

    进入root模式下 1.获取当前默认界面 systemctl get-default 2.设置命令行界面 systemctl set-default multi-user.target 3.设置图形化 ...

  6. Integer缓存IntegerCache详解

    Integer缓存IntegerCache详解 例子代码 public class IntegerCacheTest { public static void main(String[] args) ...

  7. 苹果容器Apple container是做什么用的?

    一.Apple container是什么 container是苹果公司出的一款容器工具.以轻量级虚拟机方式创建.运行Linux容器.那么,Linux容器又是什么呢? Linux容器是一种特殊的进程 进 ...

  8. MyEMS 开源能源管理系统:基于 4G 无线传感网络的能源数据闭环管理方案

    一.MyEMS 系统核心架构与技术特性​ MyEMS 作为开源能源管理领域的标杆性解决方案,采用 Python 语言构建核心框架,依托 Django 后端与 React 前端技术栈实现跨平台兼容.其模 ...

  9. 【渲染流水线】[几何阶段]-[几何着色]以UnityURP为例

    允许自定义增加和创建新图元,唯一一个能自定义增加新图元的着色器.(部分平台支持,移动端很多不支持.apple的metal不支持) [从UnityURP开始探索游戏渲染]专栏-直达 ‌作用‌ 基于图元生 ...

  10. 数据库分片(Sharding)及其优势与挑战;

    数据库分片 概念:数据库分片(Sharding)是一种将大型数据库分割成多个较小的.相互独立的部分(称为分片)的技术,每个分片可以存储在不同的服务器上,从而实现数据的分布式存储和处理. 优势 提高性能 ...