hrbust/哈理工oj 1677 一个函数【栈】【水题】

一个函数
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 49(38 users) Total Accepted: 39(36 users) Rating:  Special Judge: No
Description

现在用一个函数来处理一个字符串(该字符串只包含x和y)。

函数的两个操作如下。

1.  在字符串中找到两个连续的字符(可以不相邻),并且第一个字符是’y’,第二个字符是’x’,然后交换它们。如果一次存在多种满足该条件的连续字符,我们就找到最靠近字符串开始位置的那组进行操作。

2.  在字符串中找到两个连续的字符(可以不相邻),并且第一个字符是’x’,第二个字符是’y’,

然后从原串中将这两个字符删除。如果一次存在多种满足该条件的连续字符,我们就找到最靠近字符串开始位置的那组进行操作。

函数的运行步骤如下:

Step1: 如果你对当前的字符串至少可以进行上面两个操作中的一个,就进入Step2,否则函数运行结束。

Step2:如果你可以进行1 操作就执行它。否则执行2操作1次,2操作结束后进入Step1.

请输出函数运行结束之后经过处理符串。

Input
输入一个字符串,保证字符串不为空且仅由’x’和’y’组成。字符串长度为1~106
Output
输出函数返回值。

保证测试数据不会让返回值为空串。

Sample Input

x

yxyxy

xxxxxxy

Sample Output

x

y

xxxxx

Author
曾卓敏 @hrbust

思路:只要有一对xy就一定能够消除

直接用一个栈来收入当前字符,如果栈顶和当前字符不同,相当于匹配出去一个y,栈顶出栈,相反入栈。

最后输出栈内元素即可:

#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
char a[1000050];
int main()
{
    while(~scanf("%s",a))
    {
        stack<char >s;
        int n=strlen(a);
        for(int i=0;i<n;i++)
        {
            if(s.size()==0)s.push(a[i]);
            else
            {
                if(s.top()==a[i])s.push(a[i]);
                else s.pop();
            }
        }
        while(!s.empty())
        {
            printf("%c",s.top());
            s.pop();
        }
        printf("\n");
    }
}
时间: 2024-11-03 16:47:03

hrbust/哈理工oj 1677 一个函数【栈】【水题】的相关文章

【ECNU71】一个游戏(水题)

点此看题面 大致题意: \(n\)种元素,有若干组将\(x\)元素转化为\(y\)元素的操作.问对于所有可能的元素拥有状况,改变转化操作的顺序,是否会影响转化后最终的结果. 水题 虽说是这么水的题,但毕竟还是模拟赛题,所以照例写一下题解吧... 首先,若对于两组转化操作\((a,b),(c,d)\),\(a,b,c,d\)各不相同,显然它们是互不影响的. 否则,我们分下面几类考虑: \((a,b),(a,c)\),显然,先\((a,b)\)则\(a\)会变成\(b\),先\((a,c)\)则\(

hrbust/哈理工oj 1617 回家【BFS+BFS】

回家 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 35(9 users) Total Accepted: 10(8 users) Rating: Special Judge: No Description 寒假里,大家经常会遇上同学聚会,ikki也不例外. ikki所在的城市可以看成是一个正方形的布局,分为n*n个小方格区域.ikki每次聚会的场所都在城市的西北角,即方格 (1,1)表示的位置,而家位于城市的东南角,即(n,n)

hrbust/哈理工oj 1334 最好的心情【求最长递增子序列&amp;&amp;最大值】

最好的心情 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 200(44 users) Total Accepted: 55(38 users) Rating: Special Judge: No Description 俗话说"月有阴晴圆缺,人有悲欢离合.". 虽然大家都没这么悲催,但是心情的波动在所难免. MM的心情也会有波动,心情好心情值就高,心情不好心情值就低,每个小时都不一样,GG想知道MM最长的上升心情值的子序

train problem I (栈水题)

杭电1002http://acm.hdu.edu.cn/showproblem.php?pid=1022 Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25276    Accepted Submission(s): 9529 Problem Description As the new term com

蚯蚓——在做了一个星期的水题之后,又和这个题目耗了一会(其实好像奶牛和连棋也是水题,只是上上个星期不想写解体报告)

NOIP2017 Day2 第二题.先写了一两个中午思路混乱的版本,后来理清楚了做法重新打了一遍,却因为没有发现cmp 写反而又多花了几天时间. 最终如下. 1 #include<queue> 2 #include<cstdio> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 const int N=7166666; 7 int n,m,q,u,v,t; 8 int q

Python全栈__函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数

1.函数的有用信息 代码1: 1 def login(username, password): 2 """ 3 此函数需要用户名,密码两个参数,完成的是登录的功能. 4 :return: True 登录成功. False登录失败. 5 """ 6 print(login.__name__) 7 print(login.__doc__) 8 print('登录成功...') 9 return True 10 11 print(login.__nam

华为OJ—火车进站(栈,字典排序)

给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号.要求以字典序排序输出火车出站的序列号.其实也就是输出所有可能的出栈序列. 样例输入: 3 1 2 3 样例输出: 1 2 31 3 22 1 32 3 13 2 1 解答: 其实核心就是一个栈,对于第K个数,在第K个数进栈之前,前面的 K-1 个数要么全部出去了,要么都在栈里面,要么部分在栈里面部分出去了.那么可以假想,在第K个数入栈之前,依次从栈里面出去 0个.1个.2个--栈.si

c函数调用过程原理及函数栈帧分析

转载自地址:http://blog.csdn.net/zsy2020314/article/details/9429707       今天突然想分析一下函数在相互调用过程中栈帧的变化,还是想尽量以比较清晰的思路把这一过程描述出来,关于c函数调用原理的理解是很重要的. 1.关于栈 首先必须明确一点也是非常重要的一点,栈是向下生长的,所谓向下生长是指从内存高地址->低地址的路径延伸,那么就很明显了,栈有栈底和栈顶,那么栈顶的地址要比栈底低.对x86体系的CPU而言,其中 ---> 寄存器ebp(

函数栈帧

在函数栈帧中 一般包含以下几类重要信息 1 局部变量 :为函数局部变量开辟的内存空间 2 栈帧状态值:保存前   栈帧的顶部和底部 3 函数返回地址:保存当前函数调用前的“断点”信息,也就是函数调用前的指令位置 以便在函数返回时能够恢复到函数被调用前的代码区中继续执行指令. EIP:指令寄存器:其内存放着一个指针,该指针永远指向下一条等待执行的指令地址 可以说 控制了 EIP 寄存器的内容,就控制了进程 我们让EIP指向哪里,CPU就会去执行哪里的指令. EIP劫持原理.