zoukankan      html  css  js  c++  java
  • hdu 4915 Parenthese sequence 多校第五场

    推断一个序列是否是有效是简单的。

    可是推断序列是不是有多个解会出问题。

    那么从i=0 ~l

    假设读到问号,推断该问号成为(能否有效,该问号为)是否有效。

    假设都有效,则必有多个解。

    假设都无效,则无解。

    假设一个有效,则把问号改成有效的括号。

    代码实现例如以下

    #include<stdio.h>
    #include<string.h>
    char s[1000005],tp[1000005];
    int l;
    int pd()
    {
        int zuo,you,num,i;
        num=0;
        zuo=0;
        you=0;
        for(i=0;i<l;i++)
        {
           num++;
           if(num==1)
           {
            if(tp[i]=='?')
              tp[i]='(';
    
           }
                    
                    if(tp[i]=='(') zuo++;
                    if(tp[i]==')') you++;
                    if(you>num/2) 
                    {
                        return 0;
                    }
                    if(num%2==0)
                    {
                        if(you==num/2) 
                        {
                            zuo=0;
                            you=0;
                            num=0;
                        }
                    }
            
        }
        if(zuo>num/2) return 0;
        num=0; 
        zuo=0;
        you=0;
                for(i=l-1;i>=0;i--)
                {
                    num++;
                    if(num==1)
                    {
                        if(tp[i]=='?')
                        tp[i]=')';
                    }
                    if(tp[i]=='(') zuo++;
                    if(tp[i]==')') you++;
                    if(zuo>num/2) 
                    {
                        return 0;
                    }
                    if(num%2==0)
                    {
                        if(zuo==num/2) 
                        {
                            zuo=0;
                            you=0;
                            num=0;
                        }
                    }
                    
                }
                if(you>num/2) return 0;
                return 1;
        
    }
    int main()
    {
       int zuo,you,x,y,i;
       while(scanf("%s",s)!=EOF)
       {
           l=strlen(s);
           if(l%2==1)
           {
               printf("None
    ");
               continue;
        }
        
        else
        {
         strcpy(tp,s);
      x=pd();
      if(x==0)
      {
       printf("None
    ");
       continue;
      }
            for(i=0;i<l;i++)
            {
              if(s[i]=='?')
              {
                  strcpy(tp,s);
                  tp[i]=')';
                  x=pd();
                  strcpy(tp,s);
                  tp[i]='(';
                  y=pd();
                  if(x+y==2) 
                  {printf("Many
    ");
                  break;
                  }
                  if(x+y==0)
                  {
                      printf("None
    ");
                      break;
                  }
                  if(x==1)
                  s[i]=')';
                  else 
                  s[i]='(';             
                }    
                
            } 
            if(i==l)
                {
                    printf("Unique
    ");
                    
                }
        } 
       }
       return 0;    
    }
    
     
    


     

  • 相关阅读:
    表删除 准备
    爱可生技术文档
    Bran的内核开发指南_中文版
    LINUX 内核内存管理
    Linux Container测试之block IO
    【实时文件同步】rsync+inotify-tools的安装与配置
    openlayer3 加载geoserver发布的WFS服务
    Geoserver跨域请求设置
    Bitmap 图片格式并用 C++ 读写 Bitmap
    C++中的对象初始化
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4182534.html
Copyright © 2011-2022 走看看