zoukankan      html  css  js  c++  java
  • 2013 湘潭邀请赛 Jack’s sequence

    题目描述

    定义括号序列为如下规则序列(字符串): 1 空序列是规则序列; 2 如果S是规则序列,那(S)也是规则序列; 3 如果A和B都是规则序列,那么AB也是规则序列. 例如,下面的字符串都是规则序列: (), (()), ()() , ()(()) , (()()) 现在有一个合法的括号序列,你的任务是找出该序列“下一个”合法且与原序列等长的括号序列。 这里下一个指的是字典序比较,认为 '(' 小于 ')' ,例如 "(())" < "()()"

    输入

    多组测试数据。第一行有一个正整数T(T ≤ 1000),表示有T组数据。 每组数据占一行,为一行括号序列,保证括号序列合法且长度 <= 10,000。

    输出

    每组测试数据输出一行。 如果该序列存在“下一个”合法且与原序列等长的括号序列,输出它。 如果不存在,则输出"No solution"。

    样例输入

    4
    ()()
    (())()
    ()(())
    ((()))
    

    样例输出

    No solution
    ()(())
    ()()()
    (()())
    

    代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    char a[10005];
    int  f[10005];
    int main()
    {
        int i,j,k,n,m,num,wz;
        while(scanf("%d",&m)>0)
        {
            while(m--)
            {
                scanf("%s",a+1);
                 memset(f,0,sizeof(f));
                n=strlen(a+1);
                for(i=1;i<=n;i++)
                {
                if(a[i]=='(')
                    f[i]=f[i-1]+1;
                else if(a[i]==')')
                    f[i]=f[i-1]-1;
                }
            for(i=n,num=0,wz=0;i>=1;i--)
                if(a[i]=='('&&f[i]>1)
                {
                    num=f[i]-1;
                    wz=i;
                    break;
                }
                if(wz==0&&num==0)
                    printf("No solution\n");
                else
                {
                    for(i=1;i<wz;i++)
                           printf("%c",a[i]);
                    printf(")");
                    n=n-wz;
                    num=(n-num+1)/2;
                    for(i=1;i<=num;i++)
                        printf("(");
                    for(i=1;i<=n-num;i++)
                        printf(")");
                    printf("\n");
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    Huffman树与编码
    Python引用复制,参数传递,弱引用与垃圾回收
    Git使用说明
    numpy使用指南
    Python Socket
    温故知新之 数据库的事务、隔离级别、锁
    Oracle数据库的语句级读一致性
    VirtualBox NAT方式与主机互相通信
    Linux的定时任务
    Redis学习
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3085843.html
Copyright © 2011-2022 走看看