CodeForces 494A Treasure(字符串匹配 思维)

http://codeforces.com/problemset/problem/494/A

 

题意 有一串字符串由 ( ) # 组成 

      #代表若干个 )

      问#具体为多少时可以使每个( 都对应一个 )

 

思路 由于可以有多种方式组合

       可以默认前 cnt-1 个 #号 与它前一个 ( 匹配

       之后再对最后一个#进行特判(分别判断 #右边的num1 和左边的num2 如果num2-num1>0 则满足)

 

#include<cstdio>

#include<cstring>

#include<iostream>

#include<algorithm>

using namespace std;

char str[100000+100];

int main()

{

    int i,j,k;    

    while(scanf("%s",str)!=EOF)

    {

        int len=strlen(str);

        int ans,cnt=0,num1=0,num2=0,tcnt=0;

        int ok=1;

        for(i=0;i<len;i++)

        {

            if(str[i]=='#') cnt++;

        }

        for(i=len-1;i>=0;i--)

        {

            if(str[i]=='#') break;

            if(str[i]==')') num1++;

            else if(str[i]=='(') num1--;

            if(num1<0) {ok=0;break;}

        }

        if(ok)

        {

          for(i=0;i<len;i++)

          {

            if(str[i]=='#') tcnt++;

            if(tcnt<cnt)

            {

                if(str[i]=='(')  num2++;                                            

                else if(str[i]==')'||str[i]=='#')  num2--;                                                  

            }

            else

            {

                ans=num2-num1;

                if(ans<=0) ok=0;

                break;

            }

            if(num2<0) {ok=0;break;}

          }

        }        

        if(ok)

        {

            for(i=0;i<cnt-1;i++) printf("1\n");

            printf("%d\n",ans);

        }

        else printf("-1\n");

    }

    return 0;

}
View Code

 

       

你可能感兴趣的:(codeforces)