当前位置: 首页 > news >正文

【补题】The 2024 ICPC Kunming Invitational Contest I. Left Shifting 2

题意:给个字符串,你可以随意位移字符串,之后你可以任意次更改字符,问怎么样可以让所有字符都没有相邻相同的字符,且操作次数最少。

思路:

1.自己试图做几次操作就会很明确,相同的连续字符串,只要xaxax这么修改就可以了,也就是把中间偏后的修改掉。但是当长度为偶数的时候,如果把最后一个转移到头,例如xxxxa变成xaxxx,就可以有效减少一次操作。

2.其实最大的问题在于给你的字符串本身可能是被切割过的,所以应该把头拼到尾部或者尾部拼到头部,然后进行判断,代码苦手为这篇出个补题的原因就是自己vp的时候最后还是叫队友写的代码,同时不要忘记特判整个字符串相同,因为这样位移操作分割不掉也没有意义。

3.最后直接计算所有连续字符串的长度/2,如果不是全一样且有偶数连续字符串,那么就进行-1操作。

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define int128 __int128
#define endl '\n'
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
const int N = 2e5+10;
const int INF = 1e18;
const int MOD = 2023;void solve(){string s;cin >> s;int n=s.size();s=s+s;map<int,int> mp;int start=0;while(s[start]==s[0] && start<n)start++;for(int i=start;i<n+start;i++){int j=i;while(j<s.size() && j-i<n && s[j]==s[i]){j++;}mp[(j-i)]++;i=j-1;}int ans=0;int f=0;int jud=1;for(auto u : mp){if(u.first==n) jud=0;ans+=u.first/2*u.second;f=max(f,(u.first+1)%2);}if(jud && f){cout << ans-1 << endl;}else cout << ans << endl;
}signed main(){IOS;int t=1;cin >> t;while(t--){solve();}
}

感觉vp的时候真是超级糊涂……这居然卡了我很久很久,其实是纯签到题

相关文章:

  • STM32
  • 17:00开始面试,17:08就出来了,问的问题有点变态。。。
  • 使用CubeMX新建EXTI外部中断工程——不使用回调函数
  • 豆瓣图书数据采集与可视化分析
  • 【家政平台开发(48)】家政平台安全“攻防战”:渗透测试全解析
  • 【BUG】Redis RDB快照持久化及写操作禁止问题排查与解决
  • OpenCV的详细介绍与安装(一)
  • 【Spring框架】
  • 01 位运算
  • LoadableTransportInfo函数分析之RPCRT4!LOADABLE_TRANSPORT::LOADABLE_TRANSPORT初始化过程
  • Cube IDE常用快捷键
  • Java使用ANTLR4解析IDL文件
  • OpenCV 图形API(35)图像滤波-----中值模糊函数medianBlur()
  • 如何通过工具实现流程自动化
  • vi(vim)编辑器和root用户与普通用户之间的转换
  • Python 垃圾回收机制全解析:内存释放与优化
  • Redis--持久化
  • Spring Boot 集成金蝶 API 演示
  • 电力实习中需要注意哪些安全用电问题
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——LVDS屏幕测试
  • 建设网站必须用dns/seo是什么专业
  • 微信朋友圈做网站推广赚钱吗/百度一下你就知道下载
  • 国际网站建设与维护/游戏推广是干什么的
  • wordpress分类页首页调用分类描述/seo优化及推广如何运营
  • 驻马店做网站/怎样注册网站
  • 如何把做的网站发布到网上/体球网足球世界杯