1 条题解

  • 0
    @ 2026-10-31 13:32:21

    回文串(分段压缩)

    每一对对称位置若字符不同,恰好改一个字符即可。维护左右段剩余长度,每次取两边剩余长度的较小值,并且不超过尚未处理的对称位置数;字符不同时增加这一批长度。消耗完的段指针向内推进。同一段内部的剩余位置都是同字符,无需再改。每段最多被消耗一次,O(n)时间、O(n)空间,答案和长度均用long long。

    难度:3(geekpi-9-v2),依据:压缩字符串不能展开,需用双指针批量匹配对称段,并处理64位总长度。

    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    using namespace std;int main(){int n;cin>>n;vector<long long>a(n);vector<char>c(n);long long len=0,ans=0;for(int i=0;i<n;i++){cin>>a[i]>>c[i];len+=a[i];}int l=0,r=n-1;long long left=len/2;while(l<r&&left){long long z=min({a[l],a[r],left});if(c[l]!=c[r])ans+=z;a[l]-=z;a[r]-=z;left-=z;if(!a[l])l++;if(!a[r])r--;}cout<<ans<<"\n";}
    

    本数据为GeekPi自建训练数据,非官方评测数据。

    • 1

    信息

    ID
    2324
    时间
    1000ms
    内存
    256MiB
    难度
    普及−
    标签
    递交数
    1
    已通过
    1
    上传者