Problem Description
传纸条是一种在课堂上传递信息的老方法,虽然现在手机短信和QQ聊天越来越普及,但是手写的信息会让人感到一种亲切感。对许多学生而言,在学校里传递一些私秘性的信息是一种令人兴奋的打发时光的方式,特别是在一些令人厌烦的课堂上。
XX 和 YY 经常在自习课的时候传纸条来传递一些私密性的信息。但是他们的座位相隔比较远,传纸条要通过其他人才能到达对方。在传递过程中,难免会有一些好奇心比较强的同学偷看纸条的内容。所以他们想到了一个办法,对纸条内容进行加密。
加密规则很简单:多次在信息的任意位置随意的添加两个相同的字母。
由于使用英文交流显得比较高端,所以他们的纸条内容只有英文。
现在给你加密后的信息,请你还原出原始的内容。
Input
输入数据的第一行为一个正整数 T(T ≤ 30),表示共有 T 组测试数据。
接下来 T 行,每行为一个字符串,字符串仅包含小写英文字母,且保证原始字符串中不包含相邻两个相同的字母,字符串长度不超过200000。
Output
每组数据输出一行字符串,表示还原后的内容。
Example Input
1 ssilofaafveuuu
Example Output
iloveu
Hint
样例解释:
删除掉aa后,又出现了ff,ff也要删除掉。
01 | #include<stdio.h> |
02 | #include<string.h> |
03 | #define stacksize 200010 |
04 | #define true 1 |
05 | #define false 0 |
06 | typedef char elemtype; |
07 | typedef int status; |
08 | typedef struct |
09 | { |
10 | elemtype date[stacksize]; |
11 | int top; |
12 | } seqstack; |
13 | void initstack(seqstack *s) |
14 | { |
15 | (*s).top = 0; |
16 | } |
17 | status stackfull(seqstack s) |
18 | { |
19 | if (s.top == stacksize) return false ; |
20 | return true ; |
21 | } |
22 | void push(seqstack *s, elemtype p) |
23 | { |
24 | if (!stackfull(*s)) |
25 | { |
26 | printf ( "overflow\n" ); |
27 | } |
28 | else |
29 | { |
30 | (*s).date[(*s).top] = p; |
31 | (*s).top++; |
32 | } |
33 | } |
34 | status stackempty(seqstack s) |
35 | { |
36 | if (s.top == 0) return false ; |
37 | return true ; |
38 | } |
39 | status pop(seqstack *s, elemtype *p) |
40 | { |
41 | if (!stackempty(*s)) return false ; |
42 | (*s).top--; |
43 | *p = (*s).date[(*s).top]; |
44 | return true ; |
45 | } |
46 | int main() |
47 | { |
48 | int t, n, i; |
49 | char a[stacksize], p, b[stacksize]; |
50 | scanf ( "%d" , &t); |
51 | getchar (); |
52 | while (t--) |
53 | { |
54 | gets (a); |
55 | n = strlen (a); |
56 | seqstack s; |
57 | initstack(&s); |
58 | push(&s, a[0]); |
59 | for (i = 1; i < n; i++) |
60 | { |
61 | if (s.date[s.top-1] == a[i]) |
62 | { |
63 | pop(&s, &p); |
64 | } |
65 | else |
66 | { |
67 | push(&s, a[i]); |
68 | } |
69 | } |
70 | int c = 0; |
71 | while (stackempty(s)) |
72 | { |
73 | pop(&s, &p); |
74 | b[c] = p; |
75 | c++; |
76 | } |
77 | for (i = c-1; i >= 0; i--) |
78 | { |
79 | printf ( "%c" , b[i]); |
80 | } |
81 | printf ( "\n" ); |
82 | } |
83 | return 0; |
84 | } |