码迷,mamicode.com
首页 > 其他好文 > 详细

hdu4915

时间:2014-08-06 18:14:11      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:blog   os   io   for   ar   div   amp   log   

思路:就是先把不合格的序列除掉。然后枚举,如果遇到一个问号,先把它变成左括号,判断这样变化整个序列是否合格,然后再变成右括号,再判断整个序列是否合格,如果都合格,那么肯定是多种,如果都不合格,那么就是没有,否则就把它变成唯一合格的那个括号,继续往下判断--

 

反思:我的思路一直是这样的,但是在比赛的时候没有将它a掉?逗b了,我是用if语句,根据前后左括号,右括号、问号的数量来判断是否合格--果断是错的

唉,必须跑一个for循环,来判断是否可以合格。

#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
const int inf=1100006;
char ch[inf];
struct node
{
    int pzkh,pykh,pwh;
    int hzkh,hykh,hwh;
} s[inf],t[inf];
bool deal(int pos,int tos,int num)
{
    int n=strlen(ch);
    for(int i=num; i<n; i++)
    {
        int tmp=s[i].pzkh+pos-(s[i].pykh+tos)+(s[i].pwh-pos-tos);
        int tmp1=s[i].hzkh-s[i].hykh-s[i].hwh;
        if(tmp<0||tmp1>0)
        {
            return false;
        }
    }
    int ans=s[n-1].pzkh+pos-(s[n-1].pykh+1+tos);
    int sum=(s[n-1].pwh-pos-tos);
    if(ans>sum)  return false;
    else if(ans==sum) return true;
    else
    {
        int xx=ans+sum;
        if(xx<0) return false;
        if(xx%2==0) return true;
        else return false;
    }
}
int main()
{
    while(scanf("%s",ch)>0)
    {
        int len=strlen(ch);
        if(len%2)
        {
            printf("None\n");
            continue;
        }
        bool flg=true;
        int pos=0,tos=0;
        int r=0;
        if(ch[len-1]==‘(‘) flg=false;
        if(ch[0]==‘)‘) flg=false;
        if(ch[0]==‘?‘)
        {
            ch[0]=‘(‘;
        }
        if(ch[len-1]==‘?‘)
        {
            ch[len-1]=‘)‘;
        }

        if(flg==false)
        {
            printf("None\n");
            continue;
        }
        pos=1,tos=0,r=0;
        if(ch[0]==‘?‘) ch[0]=‘(‘;
        if(ch[len-1]==‘?‘) ch[len-1]=‘)‘;
        for(int i=1; i<len; i++)
        {
            s[i].pzkh=pos;
            s[i].pykh=tos;
            s[i].pwh=r;
            if(ch[i]==‘(‘) pos++;
            if(ch[i]==‘)‘) tos++;
            if(ch[i]==‘?‘) r++;
        }
        pos=0,tos=1;
        r=0;
        for(int i=len-2; i>=0; i--)
        {
            s[i].hzkh=pos;
            s[i].hykh=tos;
            s[i].hwh=r;
            if(ch[i]==‘(‘) pos++;
            if(ch[i]==‘)‘) tos++;
            if(ch[i]==‘?‘) r++;
        }
        r=pos=tos=0;
        for(int i=0; i<len; i++)
        {
            int tmp=s[i].pzkh-s[i].pykh+s[i].pwh;
            int tmp1=s[i].hzkh-s[i].hykh-s[i].hwh;
            if(tmp<0||tmp1>0)
            {
                flg=false;
                break;
            }

        }
        if(flg==false)
        {
            printf("None\n");
            continue;
        }
        pos=tos=0;
        r=0;
        bool w=true;
        for(int i=0; i<len; i++)
        {
            s[i].pzkh+=pos;
            s[i].pykh+=tos;
            if(1)
            {
                int tmp=s[i].pzkh-s[i].pykh+s[i].pwh;
                int tmp1=s[i].hzkh-s[i].hykh-s[i].hwh;
                if(tmp<0||tmp1>0)
                {
                    flg=false;
                    break;
                }
            }
            if(ch[i]==‘?‘)
            {
                if(1)
                {
                    int tmp=s[i].pzkh-s[i].pykh+s[i].pwh;
                    int tmp1=s[i].hzkh-s[i].hykh-s[i].hwh;
                    if(tmp<0||tmp1>0)
                    {
                        flg=false;
                        break;
                    }
                }
                bool k=false,k1=false;
                if(deal(pos,tos+1,i+1))
                {
                    k=true;
                }

                if(deal(pos+1,tos,i+1))
                {
                    k1=true;
                }

                if(k&&k1)
                {
                    w=false;
                    break;
                }
                else if(k)
                {
                    tos++;
                    ch[i]=‘)‘;
                }
                else if(k1)
                {
                    pos++;
                    ch[i]=‘(‘;
                }
                else
                {
                    flg=false;
                    break;
                }
            }
        }
        if(flg==false)
        {
            printf("None\n");
            continue;
        }
        if(w)
            printf("Unique\n");
        else
            printf("Many\n");
    }
    return 0;
}

  

hdu4915,布布扣,bubuko.com

hdu4915

标签:blog   os   io   for   ar   div   amp   log   

原文地址:http://www.cnblogs.com/ziyi--caolu/p/3894959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!