UVa 517 Word

发布时间:2026/9/27 13:32:08

UVa 517 Word
题目描述题目要求模拟一个长度为nnn的循环单词的演化过程。单词由字母a和b组成循环意味着首尾相邻。每个位置iii的下一状态由该位置及其左右邻居位置i−2i-2i−2、iii、i1i1i1的当前字母共同决定共有2382^3 8238种可能组合每种组合对应一个输出字母a或b。给定初始单词和演化步数ssssss可达2×1092 \times 10^92×109输出经过sss步后字典序最小的循环等价单词。输入格式每个数据块包含第一行整数nnn2n162 n 162n16。第二行长度为nnn的字符串由a和b组成。接下来888行每行一个长度为444的字符串c1c2c3c4c_1c_2c_3c_4c1​c2​c3​c4​表示规则若模式c1c2c3c_1c_2c_3c1​c2​c3​匹配则输出c4c_4c4​。最后一行整数sss0≤s≤2×1090 \le s \le 2 \times 10^90≤s≤2×109。输入以文件结束符EOF\texttt{EOF}EOF终止。输出格式对于每个数据块输出一行即sss步后字典序最小的循环等价单词。样例输入5 aaaaa aaaa aaab aabb abab abbb baab bbab bbbb 1输出bbbbb题目分析本题的核心是模拟循环单词的演化并利用状态循环加速。状态表示由于n16n 16n16每个单词可以用一个161616位整数表示000表示a111表示b。总状态数最多216655362^{16} 6553621665536可以存储。演化规则对于每个位置iii需要获取三个位置的字母i−2i-2i−2、iii、i1i1i1模nnn。这三个位组成一个333位二进制数kkk然后根据规则表rules[k]\textit{rules}[k]rules[k]得到新位。所有位置同时更新。循环检测由于状态数有限经过一定步数后必然进入循环。使用数组steps[state]\textit{steps}[state]steps[state]记录每个状态首次出现的步数。模拟过程中若当前状态已出现过则进入循环可直接计算出sss步后的状态。否则继续模拟。输出最终状态表示为二进制字符串生成所有循环移位取字典序最小的输出ab。复杂度分析预处理规则O(1)O(1)O(1)模拟最多655366553665536步之后查询O(1)O(1)O(1)可接受。代码实现// Word// UVa ID: 517// Verdict: Accepted// Submission Date: 2016-12-24// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;constintMAXN116;intrules[8],steps[MAXN],indexer[MAXN];intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);intn,s;string word,rule;while(cinn){cinword;intw0;for(inti0;iword.length();i){w*2;if(word[i]b)w;}for(inti1;i8;i){cinrule;intr0;for(intj0;jrule.length()-1;j){r*2;if(rule[j]b)r;}rules[r]rule.back()-a;}cins;memset(steps,-1,sizeof(steps));for(inti0;is;i){if(steps[w]0){intt(s-i)%(i-steps[w]);windexer[steps[w]t];break;}else{steps[w]i;indexer[i]w;intww0;for(intj0;jn;j){intk0;if((1(j2)%n)w)k4;if((1j)w)k2;if((1((j-1n)%n))w)k1;ww|(rules[k]j);}www;}}wordbitset16(w).to_string().substr(16-n);setstringwords;string wordwordwordword;for(inti0;iword.length();i)words.insert(wordword.substr(i,word.length()));word*(words.begin());for(inti0;iword.length();i){if(word[i]0)couta;elsecoutb;}cout\n;}return0;}

相关新闻

【QT】国产化编译指南7

【QT】国产化编译指南7

2026/9/3 14:00:50

qt-everywhere-opensource5.12.6.zip与.tar.xz的区别qt-everywhere-opensource-src-5.12.6.zip 和 qt-everywhere-opensource-src-5.12.6.tar.xz 是 Qt 5.12.6 开源完整源码包的两种不同压缩格式,核心内容(源码文件)完全一致,主要…

在 PMP(项目管理专业人士)考试中,“领导力、团队建设、冲突管理、利益相关者参与”构成了人(People)这一核心领域的核心考点

在 PMP(项目管理专业人士)考试中,“领导力、团队建设、冲突管理、利益相关者参与”构成了人(People)这一核心领域的核心考点

2026/8/23 1:06:45

在 PMP(项目管理专业人士)考试中,“领导力、团队建设、冲突管理、利益相关者参与”构成了人(People)这一核心领域的核心考点(在考题中占比高达 42%)。尤其在敏捷(Agile)和…

【QT】国产化编译指南6

【QT】国产化编译指南6

2026/8/23 1:06:45

rmp系统能用yum吗在 Linux 系统中,通常是 “RPM 包管理系统”(使用.rpm 格式包的系统,如 CentOS、RHEL、Fedora 等),这类系统可以使用 yum。yum(Yellowdog Updater Modified)是基于 RPM 包管理的…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/26 19:14:12

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/27 1:30:37

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/27 1:30:35

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/27 1:30:34

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/26 16:36:51

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/26 13:57:22

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…