我在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;
}
我实施代码的方式有问题吗? 谢谢!
答案 0 :(得分:2)
如果这是您的实际代码,那么
c-getchar_unlocked();
将导致无限循环,因为永远不会修改c
。
我怀疑你想要
c = getchar_unlocked();
使用空格键不会使代码运行得更慢并使代码更具可读性。