P14225 [ICPC 2024 Kunming I] 左移 2 个人题解

news/2025/11/23 17:43:28/文章来源:https://www.cnblogs.com/bdxzay10180615/p/19261107

题目传送门

题目大意:

给定一个字符串 \(s\),进行一次左移,即使字符串 \(s\) 变为 \(s_{(d+0)\bmod n},s_{(d+1)\bmod n},\cdots,s_{(d+n-1)\bmod n}\),然后求最少更改几个字符可以变成美丽字符串(即使字符串内相邻字符与不相同)。

解题方法:

这道题是一道贪心,我们发现一段连续且字符全都相等的字符串变为美丽字符串需要进行 \(\lfloor \frac{len}{2}\rfloor\) 次更改,我们在进行左移使可以使这样一段连续且字符全都相等的字符串分成两段,注意到向下取整的性质,即相邻的两个数,奇数向下取整是要比偶数向下取整小的,即我们在左移使如果把一段连续且字符全都相等的字符串分为两个长度为奇数的字符串是要比偶数更优的。在实现时我们可以把这样一段字符串左移至第一个字符与最后一个字符不同的位置,然后检查答案就行。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e6+6;
inline int read(){int x=0,f=1;char c=getchar();while(c<'0' || c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0' && c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
} //快读 
int T=read();
char ch[N];
vector<int> ans;
signed main(){while(T--){scanf("%s",ch);int n=strlen(ch);int j=0;if(ch[0]==ch[n-1]){	//左移使第一个数与最后一个数位置不同 for(j=0;j<n;j++){if(ch[j]==ch[n-1])ch[j+n]=ch[j];elsebreak;}}if(j==n)//如果这个序列全为一个字符,直接输出n/2 printf("%lld\n",n/2);else{ans.clear();//多测要清空!! int cnt=1;//一个字符也有长度 for(int i=j+1;i<=j+n-1;i++){if(ch[i]!=ch[i-1]){//如果不再连续,统计答案 ans.push_back(cnt);cnt=1;//长度清空 }elsecnt++;}ans.push_back(cnt);//把最后一个字符串统计上!! int sum=0;bool ok=false;for(int i=0;i<ans.size();i++){sum+=ans[i]/2;//统计答案 if(ans[i]%2==0)//如果是偶数,则可以拆分,答案-1 ok=true;}printf("%lld\n",max(sum-ok,0ll));}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【URP】Unity[相机]渲染顺序

URP相机渲染流程核心机制‌ ‌基础渲染管线顺序‌ ‌Depth Pre-Pass‌:可选深度预渲染(需手动开启) ‌Opaque Rendering‌:不透明物体从近到远排序渲染 ‌Skybox D【从UnityURP开始探索游戏渲染】专栏-直达URP相机…

PySpark - OneHotEncoder

PySpark - OneHotEncoder from pyspark.ml.feature import OneHotEncoderdata = [(0.0, 1.0), (1.0, 0.0), (2.0, 1.0)] columns = ["input1", "input2"] df = spark.createDataFrame(data, colum…

.NET 10 中 C# 14 和 F# 10 的新情况

C# 14 和 F# 10 将随 .NET 10 正式发布,这两个微软主力.NET语言的更新聚焦于生产力、代码清晰度和性能提升。本次发布通过协调一致的改进,优化了常见编码模式,同时实现了整个.NET工具链的增强。C#14 亮点C# 14版本增…

P10687 True Liars 个人题解

题目传送门 题目大意: 给你两个神圣种族和邪恶种族的人数以及询问次数,其中神圣种族的人说真话,邪恶种族的人说假话,请你判断那几个是神圣种族的人。 Solution: 题解区已经有很多带边权并查集的做法了,这里我用的…

Kali资料

Kali资料解决Kali Linux APT更新中的GPG签名错误问题

题解:Luogu P14522 【MX-S11-T3】空之碎物

题意 定义 \(\ominus\) 为二进制不退位减法。对于一个可重集 \(S\),你可以进行若干次操作,每次操作可以选择 \(S\) 中的两个数 \(x,y\),合并成 \(x\ominus y\) 或 \(y\ominus x\)。定义 \(f(S)\) 为将 \(S\) 合并至…

10分钟,无需公网 IP!零门槛搭建 NapCatQQ 趣味 AI 人机,聊天互动超简单

10分钟,无需公网 IP!零门槛搭建 NapCatQQ 趣味 AI 人机,聊天互动超简单无需公网 IP 即可打造 QQ 智能人机:核心依赖 NapCat(接收 QQ 消息)与 AstrBot(提供 AI 能力)容器,通过 WebSocket 建立连接,配置硅基流…

1088. Rational Arithmetic (20)

1088. Rational Arithmetic (20)#include <iostream>using namespace std;long long getsame(long long a, long long b) {if(b != 0){return getsame(b, a % b);}else{return a;} }void simplify(long long &am…

1087. All Roads Lead to Rome (30)

1087. All Roads Lead to Rome (30)#include <iostream> #include <vector> #include <string.h>using namespace std;struct node {int next, cost; };vector<node> v[27000]; vector<int…

解码UDP

UDP 协议基础认知 UDP(User Datagram Protocol,用户数据报协议)是传输层核心协议之一,基于 IP 协议实现跨网络主机进程间的无连接数据传输。它面向事务提供简单通信服务,不保证数据交付、有序性和重复防护,也不提…

人工智能之数据分析 numpy:第六章 数组基本操作

人工智能之数据分析 numpy:第六章 数组基本操作人工智能之数据分析 numpy 第六章 数组基本操作@目录人工智能之数据分析 numpy前言一、修改数组形状(Reshaping)1. reshape()2. resize()3. ravel() 与 flatten()二、…

2025中山办公场地租赁优选:中山西区金嘉创新港,一站式创业空间,赋能企业成长新机遇

随着中山市产业升级与创新创业浪潮的蓬勃发展,优质办公空间已成为企业发展的重要基石。在2025年中山商业地产市场中,中山西区金嘉创新港凭借多元化的空间解决方案、完善的配套服务体系及卓越的区位优势,成为各类企业…

国产数据库替代MongoDB:政务电子证照新选择 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

读书笔记《投资的未来》,估算收益率

比较IBM和新泽西标准石油两家公司,一个新兴的,受追捧的,一个传统的,但结果,是石油公司胜出。尽管两只股票的业绩都不错,但是1950~2003年,新泽西标准石油的投资者每年可以取得14.42%的年收益率,这比IBM提供的1…

使用代码查询快递信息的方法(与查询天气的方式雷同)

第一步:在标签中添加JS文件具体内容如下:第二步:写出大概的框架第三步:写JS部分(1)定义appkey和API地址(2)校验输入和显示加载状态(3)调用API和解析返回数据(4)展示拼接内容和判断内容是否正确第四步:保存并运行查…

1101. Quick Sort (25)

1101. Quick Sort (25)#include <iostream> #include <vector> #include <algorithm>using namespace std;int num[100010], low[100010], high[100010];int main() {int n;scanf("%d", &…

1100. Mars Numbers (20)

1100. Mars Numbers (20)#include <iostream> #include <string.h>using namespace std;char ch[2][13][5] = {"tret", "jan", "feb", "mar", "apr",…

解码网络编程基础

进程间通信方式 基础概念 程序是数据和指令的集合,运行时成为进程,操作系统会为其分配资源并记录参数。同一主机内进程通信可通过管道、信号、消息队列、信号量集、共享内存实现,这些方式依赖主机本地系统资源,无法…

C++的3种继承方式

C++的3种继承方式 在 C++ 中,继承方式(public、protected、private)决定了基类成员在派生类中的访问权限,以及派生类对象对基类成员的访问权限。正确选择继承方式是实现封装、复用和多态的关键。以下是三种继承方式…

1082. Read Number in Chinese (25)

1082. Read Number in Chinese (25)#include <iostream> #include <string.h>using namespace std;int first = 1;void setfirst() {if(first == 1){first = 0;}else{printf(" ");} }int main()…