#2018: Why TLE ?

Unknown User

d267. 11577 - Letter Frequency -- UVa11577 | From: [60.244.132.1] | 發表日期 : 2009-05-24 09:34

 

已經是O(N)  SPACE-Tradeoff 的演算法

是程式設計上那裡有問題嗎?

#include <stdio.h>
#include <ctype.h>

int main()
{
   
    char MyString[256];
    int N,Index,Max,T,P,Temp;

    scanf("%d\n",&N);

    for (P = 0 ; P < N ; P++)
    {
        int Table[256]={0};
        Index=0;
        Max=0;
        gets(MyString);

        while ( MyString[Index]!= '\0' )
        {
            Temp = tolower( MyString[Index] );
            if ( 'a' <= Temp  && 'z' >= Temp  )
            {
                Table[ Temp ]++;
                if ( Max < Table[Temp] )
                {
                    Max = Table[Temp ];
                }
            }
            Index++;
        }

        for (T ='a' ; T <= 'z' ; T++)
        {
            if (Max == Table[T] )
            {
               printf("%c",T);
            }
        }
        printf("\n");
    }
    return 0;
}
 

 
#2019: Re:Why TLE ?

Unknown User

d267. 11577 - Letter Frequency -- UVa11577 | From: [60.244.132.1] | 發表日期 : 2009-05-24 09:39

 

已經是O(N)  SPACE-Tradeoff 的演算法

是程式設計上那裡有問題嗎?

#include
#include

int main()
{
   
    char MyString[256];
    int N,Index,Max,T,P,Temp;

    scanf("%d\n",&N);

    for (P = 0 ; P < N ; P++)
    {
        int Table[256]={0};
        Index=0;
        Max=0;
        gets(MyString);

        while ( MyString[Index]!= '\0' )
        {
            Temp = tolower( MyString[Index] );
            if ( 'a' <= Temp  && 'z' >= Temp  )
            {
                Table[ Temp ]++;
                if ( Max < Table[Temp] )
                {
                    Max = Table[Temp ];
                }
            }
            Index++;
        }

        for (T ='a' ; T <= 'z' ; T++)
        {
            if (Max == Table[T] )
            {
               printf("%c",T);
            }
        }
        printf("\n");
    }
    return 0;
}

囧  下一分鐘就找到BUG了

是因為Input Buffer  overflow 引起無限loop

這題目"一行就是一個測試資料,這一行可能有空白,但是至少有一個字母,一行全部的字母加起來不超過200個"很容易誤導耶

也沒有說INPUT的字串上限有多少...................................  囧 

 
#2020: Re:Why TLE ?


bleed1979 (Bleed)

學校 : 不指定學校
編號 : 1489
來源 : [203.204.21.29]
最後登入時間 :
2021-05-02 22:12:13
d267. 11577 - Letter Frequency -- UVa11577 | From: [122.116.16.70] | 發表日期 : 2009-05-24 10:50

 

已經是O(N)  SPACE-Tradeoff 的演算法

是程式設計上那裡有問題嗎?

#include
#include

int main()
{
   
    char MyString[256];
    int N,Index,Max,T,P,Temp;

    scanf("%d\n",&N);

    for (P = 0 ; P < N ; P++)
    {
        int Table[256]={0};
        Index=0;
        Max=0;
        gets(MyString);

        while ( MyString[Index]!= '\0' )
        {
            Temp = tolower( MyString[Index] );
            if ( 'a' <= Temp  && 'z' >= Temp  )
            {
                Table[ Temp ]++;
                if ( Max < Table[Temp] )
                {
                    Max = Table[Temp ];
                }
            }
            Index++;
        }

        for (T ='a' ; T <= 'z' ; T++)
        {
            if (Max == Table[T] )
            {
               printf("%c",T);
            }
        }
        printf("\n");
    }
    return 0;
}

囧  下一分鐘就找到BUG了

是因為Input Buffer  overflow 引起無限loop

這題目"一行就是一個測試資料,這一行可能有空白,但是至少有一個字母,一行全部的字母加起來不超過200個"很容易誤導耶

也沒有說INPUT的字串上限有多少...................................  囧 

測試結果, 每一行input上限不超過300
 
ZeroJudge Forum