官方题解
2025-06-16 08:23:17
发布于:浙江
29阅读
0回复
0点赞
T4 午枫的01串翻转
题目大意
给定一个 串,可以进行指定操作,求出所有可能的 串中距离最远的两个 的距离是多少。
题解思路
我们其实最多只需要操作一次即可得到答案。
一共分三种情况:
- 没有 ,直接输出 。
- 只有一个 ,此时很容易发现不操作的话距离一定是 ,所以我们尽量考虑操作。
- 如果这个 在最后两个位置,要么无法操作,要么操作了一次也还是只能有一个 , 此时答案为 .
- 如果不在最后两个位置,考虑到其余位置都为 ,我们尽量操作更长的区间,能使两个 的距离最大,那么以这个 为区间左端点,最后一个 为区间右端点,对这段区间进行一次操作,就会将区间内所有的 都变为 ,此时答案为 .
- 有两个及以上个 ,此时我们可以让最左端的 不动,记这个 的位置为 ,用后面的任意 最为操作区间的左端点,最后一个 最为区间右端点,不难发现,操作后距离最左端的 最远的 一定是最后一个字符,此时答案为 .
综上所述,此题只需找到第一个 的位置,按照上述情况分类讨论即可。
参考代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
int n;cin>>n;
string s;cin>>s;s=' '+s;
int cnt=0;
for(auto c:s){
if(c=='0') cnt++;
}
if(cnt==0){
cout<<"0"<<endl;
return;
}
int pos=s.find('0');
if(cnt==1){
if(pos>n-2) cout<<0<<endl;
else cout<<n-pos-1<<endl;
}
else cout<<n-pos<<endl;
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
solve();
}
这里空空如也
有帮助,赞一个