我在 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;
}
我实现代码的方式有问题吗?谢谢!