题目描述
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。
两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。
(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。)
例如:ooOOoooO经过一段时间以后会变成oO。

输入描述:
数据有多组,处理到文件结束。
每组输入包含一行仅有’O’与’o’组成的字符串。
输出描述:
每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。

输入
ooOOoooO

输出
oO

说明
自左到右进行合并

备注:
对于100%的数据,
字符串的长度不超过100。

题目分析:考虑用栈去做,但是其中情况有很多,我刚开始做的时候就是没搞清楚大关系与小关系的位置,最后输出的时候,记得如果用的是栈那就反向输出,因为栈的性质就是先进后出。可以开一个新的数组储存正向的,然后反向遍历输出即可。

#include <bits/stdc++.h>
using namespace std;
char a[1010], b[1010];
stack<char> s;
int main()
{while (~scanf("%s", a)){int la = strlen(a);for (int i = 0; i < la; ++i){if (s.empty()) //如果为空直接入栈无法匹配s.push(a[i]);else if (s.top() == a[i]){if (s.top() == 'o') //同为小气泡{s.pop();if (s.size() && s.top() == 'O') //融合为大气泡时如果前面存在大气泡,出栈s.pop();elses.push('O'); //否则入栈两个小气泡合成的大气泡}else if (s.top() == 'O') //如果相同,又是大气泡那直接出栈s.pop();}elses.push(a[i]);}int h = 0;while (!s.empty()){b[++h] = s.top();s.pop();}for (int i = h; i >= 1; --i)putchar(b[i]);puts("");}return 0;
}

队列

#include <bits/stdc++.h>
using namespace std;
deque<char> st;
string str;
int main()
{while (cin >> str){for (int i = 0; str[i]; ++i){char c = str[i];if (st.empty() || st.back() != c)st.push_back(c);else{if (c == 'o'){st.pop_back();if (!st.empty() && st.back() == 'O')st.pop_back();elsest.push_back('O');}elsest.pop_back();}}while (!st.empty()){cout << st.front();st.pop_front();}puts("");}
}

附加题

动态数组模拟,有点像约瑟夫环
题目描述
编号为1、2、3、…、n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。从指定编号 为1的人开始,按顺时针方向自1开始报数,报到指定值m时停止报数,报第m的人出列,并将他的密码作 为新的m值,从他在顺时针方向的下一个人开始,重新从1开始报数,如此类推,直至所有的人全部出列 为止。输入n(n<=1000),m(m<=30000)及密码值(<=10000),试设计一个程序求出列顺序 。
输入
有二行,第一行,N和M,第二行,N个小于等于10000的密码值,中间用空格隔开。
输出
只有一行,就是出列的顺序,编号间以空格隔开。
样例输入
6 7
1 4 2 8 5 7

样例输出
1 2 6 3 5 4

AC代码

#include <bits/stdc++.h>
using namespace std;
int a[1010], vis[1010];
vector<int> q;
int n, m, cnt;
int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; ++i)scanf("%d", &a[i]);for (int i = 1; i <= n; ++i){if (q.size() == n - 1) //如果还剩最后一个人{for (int j = 1; j <= n; ++j) //直接遍历看看还有谁没有标记过,如果没有那就是他if (!vis[j])q.push_back(j);break;//这个break很有必要,因为这是一个无限循环,一定要有一个终点,终点就是最后一个人出栈}if (!vis[i]) //如果当前的人没有被标记{++cnt;        //就一直加if (cnt == m) //如果等于预期的数字那就要进行一段操作{m = a[i];       //首先就要重新更新m的值q.push_back(i); //然后把被点到的人放入数组vis[i] = 1;     //标记此人,相当于删除去此人cnt = 0;        //清空,开始下一次循环}}if (i == n) //因为模拟的是圆桌,人与人形成一个环,所以如果到了最后一个编号那就重新开始i = 0;}for (int i = 0; i < q.size(); ++i)//按照题目的意思输出即可{if (i == 0)printf("%d", q[i]);elseprintf(" %d", q[i]);}
}
让梦想照进现实的唯一方法,就是走好脚下的路,静待天边梦想的阳光洒下。

牛客 吐泡泡 (栈和队列)相关推荐

  1. 牛客题霸 [栈和排序] C++题解/答案

    牛客题霸 [栈和排序] C++题解/答案 题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序 ...

  2. 牛客题霸题目及题解汇总

    牛客题霸 单链表的选择排序 C++题解/答案 牛客题霸 最少素数拆分 C++题解/答案 牛客题霸 两数之和 C++题解/答案 牛客题霸 反转链表 C++题解/答案 牛客题霸 二分查找 C++题解/答案 ...

  3. LeetCode栈和队列练习

    文章目录 前言 1.力扣20. 有效的括号 1.题目分析 2.代码示现 2.力扣225. 用队列实现栈 1.题目分析 2.代码实现 3.力扣232. 用栈实现队列 1.题目分析 2.代码实现 4.力扣 ...

  4. #牛客网 吐泡泡 (栈)

    题目描述 小鱼儿吐泡泡,嘟嘟嘟冒出来.小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o". 两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉. (是的你没 ...

  5. 牛客网 A-吐泡泡 栈的模拟

    链接:https://www.nowcoder.com/acm/contest/74/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  6. 刷题记录:牛客NC15029吐泡泡

    传送门:牛客 小鱼儿吐泡泡,嘟嘟嘟冒出来.小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o". 两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉. (是的 ...

  7. 牛客网 2018年全国多校算法寒假训练营练习比赛(第二场) A.吐泡泡-STL(stack)

    不好玩,一堆板子,太菜了,被打爆了,B一直wa60%,D一直wa80%,D改了多组输入就过了... A.吐泡泡 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  8. 吐泡泡_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  9. 牛客每日练习----圆圈​​​​​​​,TaoTao要吃鸡,吐泡泡

    我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力.                                      ----喻言 链接:http ...

最新文章

  1. playbook核心元素之 模板template 介绍(7)
  2. c语言中仅分号,问什么C程序里总是提示缺少分号;,而明明有分号?
  3. Android 程序打包
  4. 刷机包各个文件都是啥
  5. typedefnbsp;struct与struct的区别
  6. php实现解压功能的函数
  7. java定义构造方法_JAVA基础学习之路(三)类定义及构造方法
  8. RK3288/RK3399 CPU定频方法
  9. 字符动图_图解redis五种数据结构底层实现(动图哦)
  10. 改变JavaScript代码行的背景色
  11. 互联网公司分批返岗;Safari 将封杀超过398天的 HTTPS 证书;TypeScript 3.8 发布 | 极客头条...
  12. request如何获取请求路径方法
  13. nginx 负载均衡 404_Nginx+.Net Core实现项目负载均衡
  14. APM代码学习笔记1
  15. 数据包络分析方法与maxdea软件_数据包络模型 DEA三阶段超效率SBM非期望
  16. flask之--钩子,异常,上下文,flask-script,模板,过滤器,csrf_token
  17. 网站服务器带宽多少合适,服务器选择时带宽选多少合适?
  18. 2021年转行软件测试能有前景吗?
  19. 【感兴区roi学习应用】OpenMv如何只识别左边屏幕里面的红色小球
  20. 202107 VMware NSX-T培训笔记2(东西向网段间路由原理)

热门文章

  1. 这可能是讲雪花算法最全的文章
  2. yolov5代码详解-build_targets(p, targets, model)
  3. linux服务器自动挂载
  4. Homebrew国内如何自动安装(国内地址)
  5. tomcat filewatchdog but has failed to stop it原因以及解决方法
  6. 测试3W单声道带关断模式的音频放大器8002B
  7. 理解Serverless架构理念
  8. 联合解决方案|亚信科技AntDB携手蓝凌软件,助推企业数字化办公转型升级
  9. sublime使less产生高亮效果
  10. 开源免费关系数据库模型建模工具