传纸条

Problem Description

传纸条是一种在课堂上传递信息的老方法,虽然现在手机短信和QQ聊天越来越普及,但是手写的信息会让人感到一种亲切感。对许多学生而言,在学校里传递一些私秘性的信息是一种令人兴奋的打发时光的方式,特别是在一些令人厌烦的课堂上。

 

XX  YY 经常在自习课的时候传纸条来传递一些私密性的信息。但是他们的座位相隔比较远,传纸条要通过其他人才能到达对方。在传递过程中,难免会有一些好奇心比较强的同学偷看纸条的内容。所以他们想到了一个办法,对纸条内容进行加密。

加密规则很简单:多次在信息的任意位置随意的添加两个相同的字母。

由于使用英文交流显得比较高端,所以他们的纸条内容只有英文。

现在给你加密后的信息,请你还原出原始的内容。

Input
 

输入数据的第一行为一个整数 T(T  30),表示共有 组测试数据。

接下来 行,每行为一个字符串,字符串仅包含小写英文字母,且保证原始字符串中不包含相邻两个相同的字,字符串长度不超过200000

Output
 

每组数据输出一行字符串,表示还原后的内容。

Example Input
1
ssilofaafveuuu
Example Output
iloveu
Hint
样例解释:

删除掉aa后,又出现了ffff也要删除掉。


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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值