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;
}