【tyvj P4868】天天和不可描述

http://www.tyvj.cn/p/4868

超级水的题,用递归来模拟,用链表保存这层的内容,每遇到一个左括号就递归一层并合并返回的链表,遇到右括号后返回。

递归进入下一层时传递个参数标记读取新字符是加载链表头还是链表尾就好了。

(之前合并两个链表的时候不小心用成insert慢成傻逼,后来才发现insert是拷贝元素,splice才是合并元素)

#include <iostream>
#include <list>
using namespace std;
list<char> s;
char c;
void getstr(bool rev, list<char> &tmp)
{
    tmp.clear();
    while (true)
    {
        c = cin.get();
        if (c == ‘)‘)
            break;
        else if (c == ‘(‘)
        {
            list<char> tmp2;
            getstr(!rev, tmp2);
            if (rev)
                s.splice(tmp.begin(), tmp2);
            else
                s.splice(tmp.end(), tmp2);
        }
        else if (rev)
            tmp.push_front(c);
        else
            tmp.push_back(c);
    }
}
int main()
{
    while (true)
    {
        c = cin.get();
        if (c == EOF)
            break;
        else if (c == ‘(‘)
        {
            list<char> tmp;
            getstr(true, tmp);
            s.splice(s.end(), tmp);
        }
        else
            s.push_back(c);
    }
    for (list<char>::iterator iter = s.begin(); iter != s.end(); iter++)
    {
        cout << *iter;
    }
    return 0;
}
时间: 2024-11-05 13:39:19

【tyvj P4868】天天和不可描述的相关文章

#587. 天天和不可描述

[题目描述]: 天天和()是好朋友,然而总是唱反调.对于一个有() 的字符串,天天总是会把()内的所有东西都倒过来读. 比如对于字符串abc(def) ,天天看到的就是abcfed . 括号里面可能是空的,也有可能套有多个括号,比如说abc(hello)(world)lcy()x(owq(zrt)),天天看到的就是abcollehdlrowlcyxzrtqwo . 因为(owq(zrt))首先变成了(trz)qwo ,接下来变成了zrtqwo ,zrt 被反转了两次,所以天天看到的还是zrt.

tyvj4868 天天和不可描述

描述 #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define maxn 500010 int len,map[maxn],st[maxn],top,mp[maxn]; char ch[maxn],vis[maxn]; void pr(int l,int r){ if(l<=r){ for(int i=l;i<=r;i++){ if(ch[i]!='(

noip模拟赛 天天和不可描述

分析:直接就这么翻肯定是不行的,换一种想法:有括号就是把括号里的字符串倒着输出,如果在括号里又遇到了括号就继续倒着输出,相当于递归. 我们可以用递归直接做,也可以用一层循环搞定,每次从左括号跳到右括号,再从右括号跳到左括号,之后走一步,就能输出处理后的字符串了,而不会死循环了. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespa

文艺平衡术

问题 D: Tyvj 1729 文艺平衡树 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入 第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2--n-1,n)  m表示翻转操作次数接下来m行每行两个数[l,r] 数据保证 1<=l<=r<=n 输出 输出一行n个数字,表示原始序列经过m次变换后的结果 样例输入 5 3 1 3

深搜——数字划分问题

TYVJ 1271 零式求和 描述 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N.现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白(例如1-2 3就等于1-23),来将每一对数字组合在一起(请不在第一个数字前插入符号).计算该表达式的结果并注意你是否得到了和为零.请你写一个程序找出所有产生和为零的长度为N的数列. 输入格式 单独的一行表示整数N (3 <= N <= 9). 输出格式 按照ASCII码的顺序,输出所有在每

图论——连通图

Tyvj 2059 元芳看电影 描述 神探狄仁杰电影版首映这天,狄仁杰.李元芳和狄如燕去看电影.由于人实在是太多了,入场的队伍变得十分不整齐,一个人的前面可能会出现并排的好多人.“元芳,这队伍你怎么看?”“大人,卑职看不出这队伍是怎么排的!但是卑职看出了一些两个人之间的前后关系!”“那么我们可以写个程序计算出来一定没有和其它人并排的人数.”“大人/叔父真乃神人也!” 输入格式 第一行两个数N.M,表示队伍一共有N个人,元芳看出了M对关系.接下来M行每行两个数a.b,表示a在b的前面(不一定正好在

NOIP模拟赛16

NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day2 期望得分:100+100+ =200+ 实际得分:100+40+70=210 T1天天寄快递 直接模拟,代码丢了...... T2天天和不可描述 splay可A 正解dfs+list #include<iostream> #include<list> #include<cstdio> using namespace std; list<char>s; char c; void getstr(boo

[Tyvj1001]第K极值 (贪心?模拟)

考前打tyvj的水题 题目描述 给定一个长度为N(0<n<=10000)的序列,保证每一个序列中的数字a[i]是小于maxlongint的非负整数 ,编程要求求出整个序列中第k大的数字减去第k小的数字的值m,并判断m是否为质数.(0<k<=n) 输入格式 输入格式:第一行为2个数n,k(含义如上题)第二行为n个数,表示这个序列 输出格式 输出格式:如果m为质数则第一行为'YES'(没有引号)第二行为这个数m否则 第一行为'NO'第二行为这个数m 测试数据 5 2 1 2 3 4 5

典型用户及场景描述

典型用户: 姓名:茉莉 性别,年龄:女,20岁 职业:在校大学生 收入:不确定 知识层次和能力:本科生,熟悉各种智能电子设备的操作,熟练各种手游. 生活/工作状况:学习,恋爱,兼职,游玩,天天都有事情做. 动机.目的和困难:动机是找办法打发时间,目的是打发等车的时间,困难是一个人等车无聊没事儿干. 用户偏好:听歌,看书 用户比例:不确定 典型场景:假期回家在火车站候车,没事儿干,太无聊. 典型描述:看着别人都在忙着自己的事情,却找不到一个人聊天.后来通过极速蜗牛打发间. 场景描述: 人物:茉莉