这道题数据是不是有问题?
查看原帖
这道题数据是不是有问题?
202977
张老师nlfb楼主2022/3/4 09:31

我看了题解,只有当连续只有1头牛时,题解只考虑了这头牛在中间的情况和在一边的情况,实际上,这头牛可以在最左边,也可以在最右边。

#include<bits/stdc++.h>
using namespace std;
int n,a[500005],cnt=1,k=0;
long long ans=0;
string s;
char c;
int main(){
	cin>>n>>s;
	s=s+'2';	//方便处理最后一个字符 
	for(int i=0;i<n;i++)	{
	//统计连续的相同牛的数量,这样每个数两边的数就是另一种牛的数量 
		if(s[i]==s[i+1])	cnt++;
		else{
			a[++k]=cnt;
			cnt=1;
		}	
	}
	
	ans=a[2]-1;					//头单独处理 
	for(int i=2;i<k;i++){
    //当前牛在最左或最右时 
		ans+=a[i-1]+a[i+1]-2;				
     //当前只有1个,牛在中间,可以两边同时选   
		if(a[i]==1)	ans+=a[i-1]*a[i+1];		
	}
	ans+=a[k-1]-1;				//尾单独处理 
	cout<<ans;
	return 0;
}

2022/3/4 09:31
加载中...