2015-04-27 105 views
1

這是我的代碼來計算no。次A [1]> B [J]。這樣, 我<Ĵ閱讀getchar_unlocked - 失敗案例

#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輸入流的案例都做了相同的算法,但是我沒有使用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; 
} 

PS:我不知道失敗的測試用例:(

回答

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

+0

謝謝Brian Bi <3。 – Mail