AT_joi2021_yo1b_b 题解

小蒟蒻的第二篇题解,有问题请指出。

思路 1

用三重循环从字符串 s 里依次找出 IOI

第一个循环找第一个 I,若找出,继续第二个循环找 O,若找出,最后第三个循环找 I,若全部找出,直接输出 Yes 返回 0 结束。遍历整个字符串也没有 IOI 的话,便输出 No。要注意的是,并不是连续的 IOI,只要有出现 IOI 并且顺序一样,就是正确的。

代码 1

#include<iostream> #include<string> using namespace std; int main() { int n; string a; cin >> n >> a; for (int i = 0; i < n; i++) { if (a[i] == 'I') { for (int j = i + 1; j < n; j++) { if (a[j] == 'O') { for (int k = j + 1; k < n; k++) { if (a[k] == 'I') { cout << "Yes\n"; return 0; } } } } } } cout << "No\n"; return 0; }

我不会告诉你我大小写输错导致四次提交错误

思路 2

但是这就结束了吗?这么做也太不符合 oier 的良好品质了,还有一种 O(n) 做法(感谢@zym0325的提醒),定义一个计数器 sum,遍历一下 s,如果为 I 并且 sum02,那么 sum 自加 1。如果为 O 并且 sum1,那么 sum 自加 1。循环结束后判断 sum 是否为 3,如果是,输出 Yes,否则输出 No

代码 2

#include<iostream> #include<string> using namespace std; int main() { int n,sum=0; string s; cin>>n>>s; for(int i=0;i<n;i++){ if(s[i]=='I'&&(sum==0||sum==2)) sum++; if(s[i]=='O'&&sum==1) sum++; } if(sum==3) cout<<"Yes\n"; else cout<<"No\n"; return 0; }

__EOF__

本文作者volatile
本文链接https://www.cnblogs.com/zjh114/p/17495293.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   volatiles  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示