解题思路:
这道题目在考试中是没有做出来的,感觉自己的思维水平还是差一些,对于这道题而言,对于一些规则的理论性的算法考察的并不多,主要是一个思维上的扩散,总体来说自己在做题过程中有些思维固化。
一开始见到这个题目的时候,感觉这是一道dp问题,但尝试了很多,总是有漏洞存在,于是便采用了一种暴力的n2的方法,但显然是行不通的,不过也水了一部分分值。但最终得到正解时,感觉还是对于一些题目描述不够敏感,或者说自己也只是对于题目能够做到简单理解,但其所描述的问题的本质并没能够抓住。另外,自己在考试过程中也有不合理的地方,对于问题没能够举出大量的例子来发现规律,仅仅在脑子中形成的初始认知是很难把握问题的本质的,我们应当从中吸取教训。
对于这个题目的正解,思想其实是比较简单的,主要从反面进行考虑,但前提是把握住问题的本质,对于字串,只有abbbbb或aaaaaab或baaaaaaa或bbbbba这些情况下不满足题意,所以我们只需要从总的情况中减去这些情况即可,这样分析,这道题并不难,但我们应当从这道题中学习一些新的思维与认知事物的方法,使思维发散开来。
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
long long n;
string s;
long long ans=0;
void func()
{
int begin=0,end=0;
int tem=0;
for(int i=1;i<s.size();i++)
{
end=i;
if(s[end]!=s[begin])
{
ans=ans-end+begin;
begin=end;
tem++;
}
}
ans=ans+tem;
begin=n-1,end=n-1;
for(int i=n-2;i>=0;i--)
{
begin=i;
if(s[begin]!=s[end])
{
ans=ans-end+begin;
end=begin;
}
}
}
int main()
{
scanf("%d",&n);
cin>>s;
ans=n*(n-1)/2;
func();
cout<<ans<<endl;
}在这里插入代码片