CF1466-C. Canine poetry
CF1466-C. Canine poetry
题意:
给出一个字符串,这个字符串里面可能会包含多个回文子字符串。现在你可以任意修改这个字符串中的任意一个字符任意次数,问你最少多少操作数之后这个字符串中所有的回文子字符串的长度不超过1。
思路:
对于一个字符串,如果它想要是一个回文字符串,那么它需要先保证它内部是一个回文字符串,像\(abcdhedcba\)这个字符串,他非常像回文字符串,但是它最中间的部分不能构成回文字符串,所以它外面的字符无论是什么也就都没有意义了。现在我们就根据这个性质,只扫描构成长度为2或3的回文字符串然后将它破坏掉,那么它可能所在的更长的回文字符串也就被破坏了。
破坏字符串的时候,我们需要将原有的字符替换掉,但是这会引发一个新的问题:如果替换的字符又和其他字符构成了新的回文字符串,而每个字符只能被替换一次,所以显然这个字符不能随意替换。我们考虑一下,如果当前的字符串是ai,那么ai只要在替换前后不和ai-1,ai-2,ai+1,ai+2构成回文字符串就可以了,而ai-1,ai-2,ai+1,ai+2最多只包含4个字符,所以一定会有符合的字符,所以下面代码我用一个\(vis\)数组来记录一个字符是否被修改过,如果修改过那么这个字符无论如何都不可能被用来构成回文字符串。
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
const int maxn = 100005;
char s[maxn], vis[maxn];
int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%s", s);
int len = strlen(s);
int ans = 0;
memset(vis, 0, sizeof vis);
for (int i = 1; i < len; i++) {
bool flag = false;
if (s[i] == s[i - 1] && !vis[i - 1]) {
flag = true;
} else if (i > 1 && s[i] == s[i - 2] && !vis[i - 2]) {
flag = true;
}
ans += flag;
vis[i] = flag;
}
printf("%d\n", ans);
}
return 0;
}
CF1466-C. Canine poetry的更多相关文章
- CodeForces Gym 100500A A. Poetry Challenge DFS
Problem A. Poetry Challenge Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...
- UVa 10361 Automatic Poetry
Automatic Poetry Input: standard input Output: standard output Time Limit: 2 seconds Memory Limit: 3 ...
- UVA10361 - Automatic Poetry
“Oh God”, Lara Croft exclaims, “it’s one of these dumb riddles again!” In Tomb Raider XIV, Lara is, ...
- Intelligent Poetry
Readme: Creat poems. import re import random from collections import Counter def Creat_Poem(number): ...
- Python Poetry 学习和使用
Poetry是啥? 是一个Python虚拟环境和依赖管理工具,另外它还提供了包管理功能,比如打包和发布.可以用来管理python库和python程序. 安装Poetry curl -sSL https ...
- LG5196 「USACO2019JAN」Cow Poetry 背包+乘法原理
\(\mathrm{Cow Poetry}\) 问题描述 LG5196 题解 因为每句诗的长度一定是\(k\),所以自然而然想到背包. 设\(opt[i][j]\)代表到第\(i\)位时,结尾为\(j ...
- mac使用poetry
安装 为了防止依赖冲突不推荐使用pip的方式直接安装,当然你也可以这样做 curl -sSL https://raw.githubusercontent.com/sdispater/poetry/ma ...
- Windows下使用poetry和pyproject.toml
0. 题引 为什么要使用poetry? 因为想使用pyproject.toml,并通过pyproject.toml进行依赖包管理,目前pip还不支持,所以poetry是首选 为什么要使用pyproje ...
- Python开发篇——构建虚拟Python开发环境(Conda+Poetry)
前言 之前虽略有提及Python,但是没有实际地写点料.惭愧,惭愧,所以这次先起个头,讲讲如何构建虚拟Python开发环境.相信之前看过我博客的人可能会想:博主不会又要聊聊Docker吧?放心,不会. ...
随机推荐
- Kafka 探险 - 生产者源码分析: 核心组件
这个 Kafka 的专题,我会从系统整体架构,设计到代码落地.和大家一起杠源码,学技巧,涨知识.希望大家持续关注一起见证成长! 我相信:技术的道路,十年如一日!十年磨一剑! 往期文章 Kafka 探险 ...
- ctfhub技能树—信息泄露—svn泄露
打开靶机 查看页面信息 使用dvcs-ripper工具进行处理 ./rip-svn.pl -v -u http://challenge-3b6d43d72718eefb.sandbox.ctfhub. ...
- 命令模式与go-redis command设计
目录 一.什么是命令(Command)模式 二.go-redis command相关代码 三.总结 一.什么是命令(Command)模式 命令模式是行为型设计模式的一种,其目的是将一个请求封装为一个对 ...
- 输入12V,输出12V的限流芯片
随着手机充电电流的提升,和设备的多样化,USB限流芯片就随着需求的增加而越来越多,同时为了更好的保护电子设备,需要进行一路或者多路的负载进行限流. USB限流芯片,5V输入 1, PW1502,常使用 ...
- 安装JDK与卸载JDK教程
卸载JDK 删除JDK的安装目录,也就是删除了主程序(通过环境变量可以找到) 删除java_home的环境变量 删除环境变量path中与java_home相关的 通过DOS命令cmd来检验是否卸载成功 ...
- 参数模型检验过滤器 .NetCore版
最近学习 .NETCore3.1,发现过滤器的命名空间有变化. 除此以外一些方法的名称和使用方式也有变动,正好重写一下. 过滤器的命名空间的变化 原先:System.Web.Http.Filters; ...
- OO第三次总结博客
规格化设计的发展历史 (因为很难寻找,所以参考了下别的同学的调研结果) 规格化设计与结构化.模块化设计密不可分,伴随着OOP语言的发展,规格化设计思想逐渐形成体系,慢慢完善. 20世纪60年代,程序的 ...
- XShell的手动直连,避免配置ssh免密的一些问题
- 抽取一部分服务端做BFF(Backend For Frontend服务于前端的后端)
Flutter+Serverless端到端研发架构实践 · 语雀 https://www.yuque.com/xytech/flutter/kdk9xc 2019-12-19 13:14 作者:闲鱼技 ...
- (转载)微软数据挖掘算法:Microsoft 线性回归分析算法(11)
前言 此篇为微软系列挖掘算法的最后一篇了,完整该篇之后,微软在商业智能这块提供的一系列挖掘算法我们就算总结完成了,在此系列中涵盖了微软在商业智能(BI)模块系统所能提供的所有挖掘算法,当然此框架完全可 ...