1.练习项目 :
题目描述
小蓝有一个只包含 0 和 1 字符串,请你帮他算算这个字符串有多少个子串将 0 和 1 取反后,再将整个子串反过来和原子串一样。
输入描述
输入第一行包含一个整数 n(n≤5×105),表示字符串长度。
第二行包含一个长度为 n 的字符串 S,S 只拥有 0、1 两种字符。
输出描述
输出仅一行,包含一个整数,表示答案。
2.选择课程
在蓝桥云课中选择题库,选择题号1627并开始练习。
3.开始练习
(1)源码 :
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1e6+10;
char sN;
int pN,tN;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin>>n>>s+1;
for(int i=2*n+1;i>=1;i--){
ti=(i&1)?0:(si\>\>1=='1'?1:-1);
}
t0=3,t2\*n+2=3;
int c=0,r=0;
for(int i=1;i<=2*n+1;i++){
pi<r?min(r-i,p2\*c-1):1;
while(ti+p\[i]+ti-p\[i]==0)pi++;
if(i+pi>r)c=1,r=i+pi;
}
ll ans=0;
for(int i=1;i<=2*n+1;i++){
ans+=(pi-1)/2;
}
cout<<ans<<'\n';
return 0;
}
(2)检验结果
对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。
(3)练习心得:
注意每段代码末尾的分号是否存在 ,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。