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

Обсуждение задачи 1102. Странный диалог

I always get Crash!!!!!!Please tell me why?Here is my program
Послано Anastas 7 июл 2007 18:40
#include<iostream.h>
#include<string.h>
#include<stdio.h>

int l,p;
char s[3000000];
void proc(int);
int main()
{
    int n,i,c;
    int ans[1002];
    cin>>n;
    for(i=1;i<=n;i++){
        l=0;
        do{
            c=getc(stdin);
            s[l++]=(char)c;
        }while(c!='\n');
        l--;
        p=0;
        proc(0);
        ans[i]=p;
    }for(i=1;i<=n;i++){
        if(ans[i]==0) cout<<"NO"<<endl;
        else cout<<"YES"<<endl;
    }
    return 0;
}
void proc(int i){
    if(i==l)    p=1;
    if(p==0){
        if(i+1<l)
            if(s[i]=='i' && s[i+1]=='n')
                proc(i+2);
        if(i+2<l)
            if(s[i]=='o' && s[i+1]=='n' && s[i+2]=='e')
                proc(i+3);
        if(i+4<l)
            if(s[i]=='p' && s[i+1]=='u' && s[i+2]=='t' && s[i+3]=='o' && s[i+4]=='n')
                proc(i+5);
        if(i+2<l)
            if(s[i]=='o' && s[i+1]=='u' && s[i+2]=='t')
                proc(i+3);
        if(i+5<l)
            if(s[i]=='o' && s[i+1]=='u' && s[i+2]=='t' && s[i+3]=='p' && s[i+4]=='u' && s[i+5]=='t')
                proc(i+6);
        if(i+4<l)
            if(s[i]=='i' && s[i+1]=='n' && s[i+2]=='p' && s[i+3]=='u' && s[i+4]=='t')
                proc(i+5);
        return;
    }
}
Maybe it is that...
Послано Boris Strandjev 19 окт 2007 19:43
I have immediately noticed a bug in your program. In the statement it is said that the total length of the strings might reach 10^7 and this could cause a single one of them to be with length more than 3000000 your upper bound for string length. This would cause your crash...