AcWing 2872. 子串分值和【乘法原理】
原题链接
中等
作者:
繁花似锦
,
2021-04-15 00:47:17
,
所有人可见
,
阅读 848
写法2:乘法原理$O(n)$, 考虑这个字母被多少个子串包含,即贡献
详细题解
#include <iostream>
#include <cstring>
using namespace std;
typedef long long LL;
int last[127];
int main()
{
string s;
cin >> s;
int n = s.size();
s = '0' + s;
LL ans = 0;
for(int i = 1;i <= n;i ++ ){
ans += (LL)(i - last[s[i]]) * (n - i + 1);
last[s[i]] = i;
}
cout << ans << endl;
return 0;
}
写法1:直接暴力,50分代码
#include <iostream>
#include <cstring>
using namespace std;
const int N = 100010;
bool cnt[26];
int main()
{
string s;
cin >> s;
long long res = 0;
for(int i = 0;i < s.size();i ++ )
for(int j = 0;j <= i;j ++ )
{
int sc = 0;
memset(cnt,0,sizeof cnt);
for(int k = j;k <= i;k ++ ) cnt[s[k] - 'a'] = 1 ;
for(int k = 0;k < 26;k ++ ){
if(cnt[k]) sc ++;
}
res += sc;
}
cout << res <<endl;
return 0;
}
怎么想到的,我这猪脑子怎么就只会暴力呢
可以可以