蓝桥·算法双周赛

1、赛时打卡

2、第二题题解

大闹蟠桃园【算法赛】

问题描述

王母娘娘举办蟠桃会,却未邀请孙悟空。这使得孙悟空怒不可遏,他当即决定大闹蟠桃园,要将蟠桃据为己有。

在蟠桃园中,有 N 条小路,编号从 1 到 N。这些小路构成了一个环形网络,具体来说,小路 𝑖 与小路 i+1(𝑖<𝑛i<n) 相互连接,小路 N 与小路 1 相互连接。每条小路都可能有天兵把守。

为了加快采摘蟠桃的速度,孙悟空施展法术,变出了 N 个分身,编号从 1 到 N。每个分身起初皆立于其对应编号的小路上,且所采摘的蟠桃数量均为 0。每当孙悟空的本体挥动一次金箍棒,所有的分身就都会向右移动到下一条小路,并出现以下情况之一:

  • 如果一个分身走入有天兵把守的小路,它采摘的蟠桃数量将变为 0。
  • 如果一个分身走入没有天兵把守的小路,它采摘的的蟠桃数量将增加 1。

孙悟空的本体能够任意次数地挥动金箍棒(包括 0 次)。

请问,在多次(包括 0次)挥动金箍棒后,所有分身所采摘的蟠桃数量之和的最大可能值是多少?

ACcode

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
int ans;

void solve()
{
	int n;
	string s;
	cin>>n>>s;
	vector<int>k;
	int cnt=0;
	for(int i=0; i<=n-1; i++)
	{
		if(s[i]=='Q') cnt++;
		else
		{
			k.push_back(cnt);
			cnt=0;
		}
	}
	k[0]+=cnt;
	if(k.size()!=0)
		for(auto u:k)
		ans+=u*(u+1)/2;
	cout<<ans;
}

signed main()
{
	ios::sync_with_stdio(0), cin.tie(0);
	solve();
	return 0;
}

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值