阅读getchar_unlocked -failed case

时间:2015-04-27 17:37:09

标签: c++

这是我的代码来计算否。时间A [i]> B [j]这样, 我< Ĵ

 #include<iostream>
 #include<cstring>
 using namespace std;
 int main()
  {
  int n,c=0,j=1,i;
  cin>>n;
  int*a,*b;
  a=(int*)malloc(sizeof(int)*n);
  b=( int*)malloc(sizeof( int)*n);
  for( i=0;i<n;i++)
   {
    cin>>a[i];
   }
  for( i=0;i<n;i++)
  {
    cin>>b[i];
  }
  while(j<n)
   {
    for( i=0;i<j;i++)
    {

    if(a[i]>b[j])
    c++;
    }
  j++;
  }
 cout<<c;
return 0;
}

这只是工作正常,我尝试使用getchar_unlocked来减少时间,但我在网站上得到了错误的答案。最初的测试用例向我展示了正确的输出,并且我确实使用cin输入流为所有情况做了相同的algo工作但是我没有使用getchar_unlocked这样做我的输入函数中是否有任何错误,或者我在哪里做错了?

我的getchar_unlock看起来像这样

int readInt()
 {
  char c=getchar_unlocked();
  while(c<'1'||c>'9')
  c=getchar_unlocked();
  int ret=0;
  while(c>='1'&&c<='9')
  {
    ret=ret*10+c-48;
    c=getchar_unlocked();
  }
  return ret;
}

P.S:我不知道失败的测试用例:(

1 个答案:

答案 0 :(得分:1)

如果存在非前导零,则readInt()不起作用。例如,如果输入为10,则会返回1

这是我经过试验和测试的实现(仅适用于非负整数)。

int get() {
    int res = 0;
    int c;
    do {
        c = getchar_unlocked();
    } while (c <= 32);
    do {
        res = 10*res + c - '0';
        c = getchar_unlocked();
    } while (c > 32);
    return res;
}

另外,我建议您使用std::vector而不是直接致电mallocnew