求助,样例过了,但是全WA

P2249 【深基13.例1】查找

Zhdy1234 @ 2023-01-09 10:40:30

#include<bits/stdc++.h>
using namespace std;
long long a[1000010],ans,q,n,m;;
int find(long long key){
    int mid,l=1,r=n;
    while(l<r){
        mid=(l+r)/2;
        if(a[mid]==key) return mid;
        else if(a[mid]<key) l=mid+1;
        else r=mid-1;
    }
    return -1;
}
int main(){

    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        cin>>q;
        ans=find(q);
        cout<<ans<<" ";
    }
    return 0;
} 

by 编码落寞 @ 2023-01-09 11:03:03

@Zhdy1234

你样例并没过

你的输出

1 3 -1 

by Zhdy1234 @ 2023-01-09 11:16:48

@编码落寞 sorry,刚没看清qwq


by Zhdy1234 @ 2023-01-09 11:18:29

这次样例肯定过了,但还是全WA

#include<bits/stdc++.h>
using namespace std;
long long a[1000010],ans,q,n,m;;
int find(long long key){
    int mid,l=0,r=n-1;
    while(l<=r){
        mid=l+(r-l)/2;
        if(a[mid]==key) return mid;
        else if(a[mid]<key) l=mid+1;
        else r=mid-1;
    }
    return -1;
}
int main(){

    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        cin>>q;
        ans=find(q);
        cout<<ans<<" ";
    }
    return 0;
} 

by 编码落寞 @ 2023-01-09 11:26:02

@Zhdy1234

你的二分不能判断a[mid]就直接输出。 例如数据:

11 3
1 3 3 3 3 3 9 11 13 15 15
1 3 6

你的程序输出

1 5 -1 

by Zhdy1234 @ 2023-01-09 11:48:02

@编码落寞 刚刚改好,已经通过了,感谢


|