CSP3 模拟总结

在这里插入图片描述
在这里插入图片描述

解题思路:

   这道题目在考试中是没有做出来的,感觉自己的思维水平还是差一些,对于这道题而言,对于一些规则的理论性的算法考察的并不多,主要是一个思维上的扩散,总体来说自己在做题过程中有些思维固化。
   一开始见到这个题目的时候,感觉这是一道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;
}在这里插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值