1 条题解
-
0
自动搬运
来自洛谷,原作者为

Zskioaert1106
值得一提的是,我在四个洛谷有 Remote Judge 的国外 OJ 上的账号都不是我的洛谷用户名。搬运于
2025-08-24 23:16:50,当前版本为作者最后更新于2025-05-26 20:49:18,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目传送门:P12612 [CCC 2025 Junior] Sunny Days
坑坑坑。
做题过程
不难想到简单的贪心:如果两段 之间只隔有一个 ,则可以将这两段合并。于是我们可以用如下方法统计:
-
记 代表上一个字符是否是 , 和 分别代表上述两段 的前一段和后一段。
-
若当前元素为 :
如果 为真,则 ;
否则 初始化为 , 改为真。 -
若当前元素为 :
如果 为真,,将 设为假; 否则将 和 同时清零。(两段中间隔了不止一个 )
每次遇到 都更新答案:。
好的,这样你可以拿到 分了。
我们漏掉了什么?
首先,因为必须修改一位,所以如果全是晴天的话,结果是 。
其次,按照上面的算法,如果全是阴雨结果为 ,但实际上是 。
没了。
代码实现
#include<iostream> using namespace std; int s1,s2,ans; bool p,p1; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ char a; cin>>a; if(a=='S'){ if(p)s2++; else s2=1,p=1; ans=max(ans,s1+s2+1); } else{ p1=1; if(p){ p=0; s1=s2; } else s1=s2=0; } } if(!ans)ans=1; if(!p1)ans=n-1; cout<<ans; return 0; } -
- 1
信息
- ID
- 12364
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者