getchar_unlocked()减慢执行时间

时间:2013-08-26 07:02:21

标签: c++

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

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

我首先使用scanf编写代码用于输入,并获得了AC,但执行时间(0.94s)非常接近允许的时间(1s)。我读过getchar_unlocked()会显着减少输入时间,因此尝试使用getchar_unlocked来实现它。但相反,它让我的时间限制超出错误。

使用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;
}

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

1 个答案:

答案 0 :(得分:2)

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

c-getchar_unlocked();

将导致无限循环,因为永远不会修改c

我怀疑你想要

c = getchar_unlocked();

使用空格键不会使代码运行得更慢并使代码更具可读性。