BNUOJ 44586 顽皮的字母 (栈的应用)

顽皮的字母

大家都知道有26个英文字母,abcdef…。由这些字母组成了一个字符串,但是,由于这些字母日久生情,有一些字母挨在一起的时候就会一起跑走玩耍。我们对26个字母编号1~26,就是说1对应a,…,26对应z,第i个字母和第i+1个字母相互有好感,挨在一起会跑开,i为1~26里面的奇数,跑开之后空位由后面的字母补上。现在问题来了,输入一个长度为n(n<10^5)的字符串,这个字符串包含挨在一起的情况比如ab挨在一起,问最后剩下的字符串是什么。

Input

第1行为数据组数T(T<=100)。

第2行到第T+1行为输入字符串,每行一个字符串。

保证输入全为英文小写字母。

Output

对于每个字符串,输出一行最后剩下的字符串。如果最后所有的字母都跑开了输出“sad!”,不包括引号。

Sample Input

2
ababababc
abacda

Sample Output

c
aa

解析:由于这个特殊的要求,如果用数组来回扫的话,肯定是超时了。所以我们可以用到栈,这样每个元素只进栈一次,时间就能达到O(n)的。具体实现方法如下:

先把第一个字符入栈,再把剩下的n-1个字符入栈, 每次入栈的时候都判断当前字符和栈顶元素是否满足跑走的条件:即两个字符中的较小的那个在字符表中的位置是奇数,且

两个字符在字母表中位置相邻。如果满足的话,就将栈顶元素出栈;否则,就将该字符入栈。然后重复上述操作,直到将剩下的n-1个字符全部扫一遍为止,最后在栈里面剩的就是剩下的字符串,不过直接弹出的话是倒序的,要调整一下顺序。

AC代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
#define INF 0x7fffffff
#define LL long long
#define LLL(a, b)  a<<b
#define RRR(a, b)  a>>b
#define MID(a, b)  a+(b-a)/2
const int maxn = 1000 + 10;

int main(){
    #ifdef sxk
        freopen("in.txt", "r", stdin);
    #endif // sxk

    int n;
    string s;
    scanf("%d", &n);
    while(n--){
        char p[100005];
        int foo = 0;
        cin >> s;
        int len = s.size();
        for(int i=0; i<len; i++){
            if(foo && min(p[foo-1] - 'a', s[i] - 'a') % 2 == 0 && abs(p[foo-1] - s[i]) == 1) foo --;       //满足跑走的条件
            else p[foo++] = s[i];                    //不满足条件,字符入栈
        }
        if(!foo)  printf("sad!");
        for(int i=0; i<foo; i++)  cout << p[i];
        cout << endl;
    }
    return 0;
}
时间: 2024-11-03 03:29:27

BNUOJ 44586 顽皮的字母 (栈的应用)的相关文章

BNUOJ新生赛题解

首先给个链接给大家,让大家慢慢看题http://acm.bnu.edu.cn/v3/problem.php#page=1726 题目1:无聊的游戏 比赛的时候不敢对数学题下手是个巨大的问题.题目很明显给那么大的n,k(最大10^9).除了数学规律没有其他方法.首先就是对n分类,分奇偶.多算几个就边弄边猜 下面讨论:n为奇数时,当k%4=1或者2时,B获胜,否则A获胜 n为偶数时,当k为奇数,为平局输出F:当k%4=2时,输出B,否则输出A 其实吧,这种题在比赛的时候,派个队友数学好的,把n,k=

UVA 1596 Bug Hunt (大模拟 栈)

题意: 输入并模拟执行一段程序,输出第一个bug所在的行. 每行程序有两种可能: 数组定义: 格式为arr[size]. 例如a[10]或者b[5],可用下标分别是0-9和0-4.定义之后所有元素均为未初始化状态. 赋值语句: 格式为arr[index]=value. 或者arr[index] = arr[arr[index]]. 例如a[0]=3或者a[a[0]]=a[1]. 赋值语句和数组定义可能会出现两种bug: 下标index越界: 使用未初始化的变量(index和value都可 能出现

#个人赛第三场解题总结#

C. Monty Hall problem Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name:Main SubmitStatus PID: 44578 蒙提霍尔问题,亦称为蒙特霍问题或三门问题(Monty Hall problem),是一个源自博弈论的数学游戏问题. 这个游戏的玩法是:参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可

Python 解LeetCode:394 Decode String

题目描述:按照规定,把字符串解码,具体示例见题目链接 思路:使用两个栈分别存储数字和字母 注意1: 数字是多位的话,要处理后入数字栈 注意2: 出栈时过程中产生的组合后的字符串要继续入字母栈 注意3: 记得字母出栈的时候字符要逆序组合成字符串 注意4: 不用字符串而用字母栈的原因是字符串的 join 效率会比字符串加法高一些 结果: 30 ms, beat 98.02% 缺点:判断是数字那里有点代码不简洁,可以把 j 挪到循环外面的 class Solution(object): def dec

七方件业金离以提领前群约会ODjdidtlwfWv

为了从不同环节,尤其与广大使用人群直接关系的环节反映质量状况,对共享自行车投放点.运营仓库.生产企业等不同环节的产品抽查,覆盖了共享自行车从成品出厂到待投放的关键环节. 该负责人称,根据新车投放情况,结合共享自行车行业市场占有分布特点,本次重点抽查了摩拜.ofo.Hellobike三个品牌的产品,占本次抽查批次总数的83.3%.其中,在天津.无锡.武汉.广州.深圳.东莞6个城市抽查了9批次摩拜产品,占产品抽查批次总数的37.5%,抽查批次合格率88.9%,抽查不合格的1批次产品为待投放于广州市的

php获取中文字符拼音首字母 阿星小栈

//php获取中文字符拼音首字母 public function getFirstWord($str){ if(empty($str)){return '';} $fchar=ord($str{0}); if($fchar>=ord('A')&&$fchar<=ord('z')) return strtoupper($str{0}); $s1=iconv('UTF-8','gb2312',$str); $s2=iconv('gb2312','UTF-8',$s1); $s=$s

取汉子拼音首字母的C#方法

/// <summary> /// 获得一个字符串的汉语拼音码 /// </summary> /// <param name="strText">字符串</param> /// <returns>汉语拼音码,该字符串只包含大写的英文字母</returns> public static string GetChineseSpell(string strText) { if (strText == null || st

【C++】c++中栈 队列 的应用

C++中提供了STL模板statck 在使用的时候更为方便 除了一般的队列外 还有STL更有双向队列可以使用 #include<deque> 声明:deque <type > name 应用举例1:铁轨问题 Description There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Un

Python全栈开发【第一篇】:初识Python

Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与while循环练习题 基本数据类型前引 Python 的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jyhton Python的Java实现,Jython会将Pyth