题意: 解法: 其实全0和全1是无所谓的,只需要全部相同就行了, 因为每次操作是令一个>=k区间的翻转,如果是全1,令[1,n]再翻转一次即可. 考虑[1,i]已经相同,s[i]!=s[i+1]时如何操作, 要使得[1,i+1]相同,要么[1,i]翻转,要么[i+1,n]翻转, 为了使k最大,显然选择大区间翻转,即max(i,n-i),因此ans=min(ans,max(i,n-1)). code: #include <bits/stdc++.h> #define int long long using namespace std; const int maxm=1e6+5; char s[maxm]; int n; void solve(){ cin>>(s+1); n=strlen(s+1); int ans=n; for(int i=1;i<=n-1;i++){ if(s[i]!=s[i+1]){ ans=min(ans,max(i,n-i)); } } cout<<ans<<endl; } signed main(){ ios::sync_with_stdio(0);cin.tie(0); solve(); return 0; }