Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33057 | 23级徐泽厚 | 【J】T4 | C++ | 运行出错 | 50 | 31 MS | 11016 KB | 2071 | 2024-10-04 12:34:15 |
#include <bits/stdc++.h> using namespace std; string s; int n; int sum[100005][27]; long long ans=0; void len2000(){ for (int i=1;i<=n;i++){ for (int j=1;j<=i;j++){ for (int k=1;k<=26;k++){ if (sum[i][k]-sum[j-1][k]==1){ ans++; k=27; } } } } printf("%lld\n",ans); return; } int sumk=0; int main(){ getline(cin,s); n=s.size(); s=' '+s; if (n<=100000){ for (int i=1;i<=n;i++){ for (int j=1;j<=26;j++){ sum[i][j]=sum[i-1][j]; } sum[i][s[i]-'a'+1]++; } } if (n<=2000){ len2000(); return 0; } for (int i=1;i<=26;i++){ if (sum[n][i]>0) sumk++; } if (sumk==1){ printf("%d\n",n); return 0; } if (sumk==2){ ans=n; for (int i=1;i<=n;i++){ int ans1=0,ans2=1; for (int j=i+1;j<=n;j++){ if (s[i]!=s[j]){ ans1++; } else{ ans2++; } if (ans1>1 and ans2>1){ j=n+1; } if (ans1==1 or ans2==1){ ans++; } } } printf("%lld\n",ans); return 0; } if (n>100000){ ans=n; for (int i=1;i<=n;i++){ int ans1=0,ans2=1; for (int j=i+1;j<=n;j++){ if (s[i]!=s[j]){ ans1++; } else{ ans2++; } if (ans1>1 and ans2>1){ j=n+1; } if (ans1==1 or ans2==1){ ans++; } } } printf("%lld\n",ans); return 0; } /* abbbaaab */ return 0; }