尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

AT_agc012_c [AGC012C] Tautonym Puzzle 题目分析

AT_agc012_c [AGC012C] Tautonym Puzzle 题目分析
📅 发布时间:2026/6/19 14:40:18
# 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 $ 个。 ## 题目分析这显然是一道构造题目,高质量的构造题目。我们注意到填什么似乎并不重要,重要的是种类不同。

题目

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;
}

相关新闻

  • 详细介绍:回调函数与错误处理
  • .NET操作Word/WPS打造专业文档 - 页面设置与打印控制完全指南
  • NORDIC蓝牙6.0新品NRF54L15多协议超低功耗高性能BLE芯片 - 动能世纪

最新新闻

  • 魔都黄金回收暗访实录:24小时上门实测闵行、浦东、松江、静安、普陀五家临街老店,谁才是最良心之选? - 昌福黄金回收
  • 思源宋体终极指南:7种字重免费开源字体解决你的中文排版难题
  • 深入解析S12 MSCAN模块:硬件保护、时钟配置与低功耗设计实战
  • 大模型转型攻略:小白程序员轻松入门,收藏这份从零到精通的学习指南!
  • MPC555/556微控制器架构解析:PowerPC内核、IMB总线与关键外设实战
  • ThumbmarkJS架构解析:从工厂模式到组件管理的设计哲学

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号