-1

我在 CodeChef 上尝试了一个问题,其中输入将是一个大小为 N 的数组,我们必须输出在数组中重复次数最多的数字以及计数。

问题链接:: http://www.codechef.com/problems/MAXCOUNT/

我首先使用 scanf 编写代码作为输入,得到了一个 AC,但执行时间(0.94 秒)非常接近允许的时间(1 秒)。我读过 getchar_unlocked() 显着减少了输入时间,因此尝试使用 getchar_unlocked 来实现它。但相反,它给了我一个 Time Limit Exceeded 错误。

使用 getchar_unlocked :: 的代码

#include <iostream>
#include <cstdio>

using namespace std;

void fastRead(int* a)
{
 char c=0;
 while (c<33) c=getchar_unlocked();
 *a=0;
 while (c>33)
{
    *a=*a*10+c-'0';
    c-getchar_unlocked();
}
}

int main()
{
int cases;
int size,in;
fastRead(&cases);
while(cases--)
{
    int arr[100001]={0};
    int max=0;
    int index=0;
    fastRead(&size);
    for(int i=0; i<size; i++)
    {
        fastRead(&in);
        arr[in]++;
        if(arr[in]==max)
        {
            if(in<index)
                index=in;
        }
        if(arr[in]>max)
        {
            max=arr[in];
            index=in;
        }
    }
    printf("%d %d\n", index, max);
}
return 0;
}

我实现代码的方式有问题吗?谢谢!

4

1 回答 1

2

如果那是您的实际代码,那么

c-getchar_unlocked();

将导致无限循环,因为c从未修改过。

我怀疑你想要

c = getchar_unlocked();

使用空格键不会使您的代码运行速度变慢,并使代码更具可读性。

于 2013-08-26T07:59:41.043 回答