[解题报告]加密 栈

【Description】
有一个仅含小写字母的字符串,我们把它按如下方法加密:
STEP1:把所有连续的相同字母都用一个字母代替。比如 aaabbbb 被替换为 ab。
STEP2:在随机的位置插入两个相同的小写字母。重复 STEP2 很多次。
下面是一个加密的实例
初始字符串 ssstieerrrliiittz
STEP1 之后 stierlitz
插入 dd stddierlitz
插入 aa stdaadierlitz
插入 ww wwstdaadierlitz
现在我们给定加密后的字符串,求执行 STEP1 之后的字符串是什么。
【Input】
一个字符串,表示加密后的字符串。
【Output】
一个字符串,表示执行 STEP1 之后的字符串。
【Sample Input】
wwstdaadierlitz
【Sample Output】
stierlitz
【Hint】
对于 30%:N<= 1000
对于 70%:N<=100000
对于 100%:N<=1000000

(说好的水题呢)首先经过了step1,整个字符串每个字母都不会连续出现,step2后,对于连续一个字母(如abba中的bb n=2)其连续长度n有2种情况

1.n%2==0:这一串都是step2添加的可以全部删去

2.n%2==1:这一串能被2整除的一部分可以删去,余下一个字母

从字符串中随机删去字符?<s>链表不是可以快速实现吗?</s> <s>(从此本题臭了)</s>,对于本题,链表的实现 有(fei) 点(chang) 复(gui) 杂(chu)

本题正解是栈,每次输入入栈,入栈时完成对字符串的处理

对于字符入栈有2情况:栈顶与这个字符重复:pop栈顶,不push此字符,(当前字符与栈顶字符正好是2个相同的!)

不重复的字符直接入栈

例如abba 对于一个被割断的连续2字符aa,在首的a一定能在若干个字符后找到与其配对的a,并且满足FILO的顺序(这不就是栈吗??!)

代码:

 1 #include <cstdio>
 2 #define pname "encryption"
 3 #define commonfio freopen(pname".in","r",stdin); freopen(pname".out","w",stdout);
 4 using namespace std;
 5 char orz[1000005];
 6 int tot=-1;
 7 int main(){
 8     //commonfio
 9     char x;
10     while(1){
11         x=getchar();
12         if(x>=‘a‘ && x<=‘z‘){
13             if(tot!=-1 && orz[tot]==x){
14                 tot--;
15             }else{
16                 orz[++tot]=x;
17             }
18         }else break;
19     }
20     orz[tot+1]=0;
21     printf("%s",orz);
22 }
时间: 2024-12-12 03:47:39

[解题报告]加密 栈的相关文章

解题报告——-2018级2016第二学期第三周作业

解题报告——2018级2016第二学期第三周作业 A:[NOIP2002P]过河卒 题目: 描述 如图,A 点有一个过河卒,需要走到目标 B   点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例 如上图 C  点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C).卒不能通过对方马的控制点. 棋盘用坐标表示,A 点(0,0).B 点(n,m)(n,m 为不超过 20  的整数,并由键盘输入)

济南-1029试题解题报告

By shenben 本解题报告解析均为100分解题思路. 上午 T1 题意:给你两个日期,问这两个日期差了多少毫秒 解析:标程用ctime库函数写的,编译器版本高了才会过(NOIP编译器版本不会太高): 只能老老实实打模拟. 小技巧:最后多输出“000”,计算秒就好了.(特判两个时间相同,只输出“0”) T2 题意:有m个站口,有n个人按顺序排队,求n+1个人最少等多长时间 解析:(标程显然 同下) ①n<m 输出0(显然) ②n>=m 建一个小根堆(可以用优先队列),把前m个人的时间扔到堆

[LeetCode]Longest Valid Parentheses, 解题报告

题目 Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another example i

2014 UESTC暑前集训数据结构专题解题报告

A.Islands 这种联通块的问题一看就知道是并查集的思想. 做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作.给每个位置分配一个数字,方便合并集合.同时将这些数字也排一个序,降低枚举的复杂度.合并集合时向四周查询浮出水面但是没有合并到同一集合的点进行合并. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath&

洛谷OJ P1141 01迷宫 解题报告

洛谷OJ P1141 01迷宫 解题报告 by MedalPluS [题目描述]    有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上.你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身).   [输入描述]   输入的第1行为两个正整数n,m.  下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格.  接下来m行,每行2个用空格分隔的正整数i,j,对

Poi 2014 解题报告( 1 - 4 ,6 )

撸了一下Poi 2014 ,看了一下网上题解不多,所以决定写一下.有的题应该是数据不强水过去了,等北京回来在写一下复杂度比较靠谱的代码 o(╯□╰)o 第一题: 题意是给定一个长度不大于1000000,只包括p和j的串,求一个最长的子串,要求子串任何一个前缀和后缀都满足p的数量不少于j的数量. 首先把p当做1,把j当做0,算出前缀和 sum[] ,原来的问题就转化为求一个最长区间 [l,r] ,使得任意的i∈[l,r],都有 sum[i] - sum[l-1] >= 0 并且 sum[r] -

杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告

杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) Problem Description 有N个比赛队(1<=N<=500).编号依次为1,2,3,.....N进行比赛.比赛结束后.裁判委员会要将全部參赛队伍从前往后依次排名. 但如今裁判委员会不能直接获得每一个队的比赛成绩,仅仅知道每场比赛的结果.即P1赢P2,用P1.P2表示,排名时P

NOIP2008解题报告

2008年的题目相对比较简单,都不是很麻烦,认真写就能写对. 第一题: 题目大意:给出一个小写单词,求出最少出现的字母的出现次数和最多出现的字母的出现次数. 解题过程:直接hash模拟就好. 第二题: 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 1. 加号与等号各自需要两根火柴棍 2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A.B.C>=0) 3. n

北京大学Online Judge 之 “求高精度幂(ID1001)”解题报告

北京大学Online Judge 之 "求高精度幂(ID1001)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 题目描述: Description 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解决的问题是:对一个实数R( 0.0 < R <99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < n <