ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1574. Математики и скобки

Why WA #11?
Послано prtest 21 мар 2008 15:21
RT.


#include<iostream>
#include<string.h>
using namespace std;
int start,l,flag=1;
char str[100010];
void init()
{
    cin>>str;
    l=strlen(str);
}
int check(int a,int &now)
{
    int i=a+1,count=1;
    if(str[a]==')') return 0;
    for(;i!=a;i++)
    {
        if(i==l) i=0;
        if(i==a) break;
        if(str[i]=='(') count++;else count--;
        if(count<0) {now=i+1;return 0;}
    }
    return 1;
}
void find()
{
    int i,now;
    if(check(0,now)) {start=0;return;}
    for(i=1;i<l;i++)
    {
        if(str[i]=='(' && str[i-1]==')')
            if(check(i,now)) {start=i;return;}else i=now;
    }
    if(i==l) flag=0;return;
}
void solve()
{
    int i,count=1,ans=0;
    if(flag==0) {cout<<0<<endl;return;}
    for(i=start+1;i!=start;i++)
    {
        if(i==l) i=0;
        if(i==start) break;
        if(str[i]=='(') count++;else count--;
        if(count==0) ans++;
    }
    cout<<ans<<endl;
}
int main()
{
    init();
    find();
    solve();
    return 0;
}