热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Codeforces1466C:CaninePoetry——思维与贪心算法的应用分析

题目链接:Caninepoetry问题概述:给定一个仅包含小写字母的字符串,允许将任意位置的字符修改为任意其他小写字母。目标是通过最少次数的修改,使字符串中所有长度大于1的子串均满足特定条件。本文详细分析了该问题,并运用思维与贪心算法,提出了一种高效解决方案。通过对字符串的深入解析,我们探讨了如何在最小化修改次数的同时,确保所有子串符合要求。

题目链接: Canine poetry


大致题意

给出一个仅由小写字母组成的字符串. 你可以把任意位置的字符修改为任意小写字母.

问: 至少进行多少次修改, 可以使得字符串中所有长度大于1的连续子串不为回文串.

解题思路

思维

长的回文串内部一定含有短的回文串, 因此如果我们想破坏一个回文串, 我们应破坏其内部的所有短回文串. 这样破的坏的才"彻底".

考虑到字符串的回文串只有两种: AA型ABA型. 因此我们只需要枚举两种回文类型进行判断即可.

贪心

考虑到如果我们从前向后扫描, 如果此时出现了AA型, 则我们应当修改靠后位置的字符. 因为靠后位置可能再与其后续组成回文串. 对于ABA型, 我们同理也应当修改靠后位置的字符.

即: 如果在index位置产生了AB型回文, 则我们应修改index+1位置; 若产生了ABA型回文, 则修改index+2位置.

我们应当如何修改字符(把字符修改成什么)?

我们只需要防止修改后再出现AA型ABA型回文串即可. 因此如果对于pos位置进行修改:
我们需要防止[pos - 1, pos], [pos - 2, pos], [pos, pos + 1], [pos, pos + 2]组成回文串.
因此我们只需要修改为不是[pos - 1, pos + 2]区间的字符即可. (如果[pos - 2, pos]形成回文, 则s[pos - 2] == s[pos], 因此无需判断pos - 2位置)

char fact(int pos) {set<char> st;for (int i &#61; pos - 1; i <&#61; pos &#43; 2; &#43;&#43;i) st.insert(s[i]);for (int i &#61; &#39;a&#39;; i <&#61; &#39;z&#39;; &#43;&#43;i) if (!st.count(i)) return i;}

综上所述, 我们发现我们一定可以找到一个合法字符, 使得修改pos位置后, pos位置不会再和其余位置组成回文串. 因此我们也可以简化查找这一过程, 把被修改的字符用特殊字符去替代.

AC代码

#include
#define rep(i, n) for (int i &#61; 1; i <&#61; (n); &#43;&#43;i)
using namespace std;
typedef long long ll;
const int N &#61; 1E5 &#43; 10;
char s[N];
int main()
{int t; cin >> t;while (t--) {scanf("%s", s &#43; 1);int len &#61; strlen(s &#43; 1);int res &#61; 0;rep(i, len - 1) {if (s[i] &#61;&#61; &#39;$&#39;) continue; //已经修改过了if (i &#43; 2 <&#61; len) {if (s[i] &#61;&#61; s[i &#43; 2]) {s[i &#43; 2] &#61; &#39;$&#39;; //特殊字符 &#39;$&#39;res&#43;&#43;;}}if (s[i] &#61;&#61; s[i &#43; 1]) {s[i &#43; 1] &#61; &#39;$&#39;; //特殊字符 &#39;$&#39;res&#43;&#43;;}}printf("%d\n", res);}return 0;
}

END


推荐阅读
  • 寒假作业解析:第三周 2月12日 第7题
    尽快完成之前的练习任务!每日一练2.1 Problem A Laurenty and Shop 的题目要求是选择两条不同的路线以最小化总的等待时间。简要分析:通过对比不同路线的等待时间,可以找到最优解。此问题可以通过动态规划或贪心算法来解决,具体取决于路线的复杂性和约束条件。 ... [详细]
  • 本文对常见的字符串哈希函数进行了全面分析,涵盖了BKDRHash、APHash、DJBHash、JSHash、RSHash、SDBMHash、PJWHash和ELFHash等多种算法。这些哈希函数在不同的应用场景中表现出各异的性能特点,通过对比其算法原理、计算效率和碰撞概率,为实际应用提供了有价值的参考。 ... [详细]
  • 在洛谷 P1344 的坏牛奶追踪问题中,第一问要求计算最小割,而第二问则需要找到割边数量最少的最小割。通过为每条边附加一个单位权值,可以在求解最小割时优先选择边数较少的方案,从而同时解决两个问题。这种策略不仅简化了问题的求解过程,还确保了结果的最优性。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • 在探讨P1923问题时,我们发现手写的快速排序在最后两个测试用例中出现了超时现象,这在意料之中,因为该题目实际上要求的是时间复杂度为O(n)的算法。进一步研究题解后,发现有选手使用STL中的`nth_element`函数成功通过了所有测试点。本文将详细分析这一现象,并提出相应的优化策略。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 深入解析C语言中的动态规划算法:以背包问题为例
    本文深入探讨了C语言中动态规划算法的应用,以经典的背包问题为例进行详细解析。通过实例分析,展示了如何利用动态规划解决复杂优化问题,并提供了高效的代码实现方法。文章不仅涵盖了算法的基本原理,还讨论了其在实际编程中的应用技巧和优化策略,为读者提供了全面的理解和实践指导。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 在编程笔试和面试中,全排列算法因其适中的难度而备受青睐,不仅能够考察应聘者的算法基础,还能测试其对递归和回溯的理解。本文将深入解析全排列算法的实现原理,探讨其应用场景,并提供优化建议,帮助读者更好地掌握这一重要算法。 ... [详细]
  • 蓝桥杯算法实战:节点选取策略优化分析
    本文针对蓝桥杯算法竞赛中的节点选取策略进行了深入分析与优化。通过对比不同节点选择方法的效果,提出了基于贪心算法和动态规划的综合优化方案,旨在提高算法效率和准确性。实验结果表明,该优化策略在处理大规模数据集时表现出色,显著提升了算法性能。 ... [详细]
  • Objective-C 中的委托模式详解与应用 ... [详细]
  • 题目要求在给定区间 \([l, r]\) 内的所有整数中,通过最多 \(k\) 次操作,使得最终数组的 GCD(最大公约数)尽可能大。每次操作可以选择数组中的任意两个数,将其相乘后替换回数组中。本文将详细解析该问题的基本算法思路,并分享一些实用的解题技巧。 ... [详细]
author-avatar
潸-苫_390
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有