Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33239 hi_hi 【J】T4 C++ 解答错误 0 455 MS 53196 KB 734 2024-10-04 17:31:44

Tests(0/20):


#include<bits/stdc++.h> using namespace std; int sum[27][5000001],ans;//sum[i][j]表示字母j在第i之前第一个出现的位置 string s; int main(){ cin>>s; long long n=s.length(); s=" "+s; for(int i=1;i<=n;i++){ for(int j=0;j<26;j++){ sum[j][i]=sum[j][i-1]; } sum[s[i]-'a'][i]=i; } for(int i=1;i<=n;i++){ vector<pair<int,int> > q; for(int j=0;j<26;j++){ int r=sum[j][i]; int l=sum[j][r-1]; l++; if(l<=r)q.push_back({l,r}); } sort(q.begin(),q.end()); int last=0; for(int j=0;j<q.size();j++){ int l=q[j].first,r=q[j].second; if(l>last){ ans+=l-r+1; } else if(r>last){ ans+=r-last; } last=max(last,r); } } printf("%d",ans); }


测评信息: