商业网站的相关内容,wordpress火车头分类id表单名,做数码后期上数码网站,科技创新作文这道题其实也是和子串分值的题是一样的#xff0c;运用贡献法的思路来算的。
这里需要强调一一点#xff1a;这里的说的是不小于3的子序列#xff0c;而不是全部序列。
所以#xff0c;在我们算出来这个值之后#xff0c;需要进行减法处理#xff0c;首先需要减去只有一…这道题其实也是和子串分值的题是一样的运用贡献法的思路来算的。
这里需要强调一一点这里的说的是不小于3的子序列而不是全部序列。
所以在我们算出来这个值之后需要进行减法处理首先需要减去只有一个字符的子字符串。然后就是两个的之后就是正确答案了。
注意在减去两个长度的子子串的时候需要每个子串多减去一次因为轮流对于G和H进行贡献处理会对于同一个字符串进行操作。
上代码
#includeiostream
#includestdio.h
#includecstring
#includecstdlib
#includecmath
#includevector
#includealgorithm
#includestack
#includequeue
#includesstream
#includemap
#includelimits.h
#includeset
#define MAX 500050
#define _for(i,a,b) for(int ia;i(b);i)
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long LL;
typedef pairint,int PII;LL n, m, counts, num;
char s[MAX];
int l[MAX];
int r[MAX];
int p[MAX];
int main() {ios::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);cin n;cin s 1;int size strlen(s 1);for (int i 1; i size; i) {int tmp s[i] - A;l[i] p[tmp];p[tmp] i;}for (int i 0; i 26; i)p[i] n 1;for (int i size; i; i--) {int tmp s[i] - A;r[i] p[tmp];p[tmp] i;}for (int i 1; i size; i) {counts (LL)(i - l[i]) * (r[i] - i);}for (int i 1; i size-1; i) {if (s[i] ! s[i 1])num;}counts counts - num*2 - n;cout counts endl;return 0;
}