问一下dalao们,为什么我的全部WA???

P2249 【深基13.例1】查找

Prince0618 @ 2024-11-05 22:02:26

我用的是二分查找。

帮助我的大佬可以互关吗?

#include<bits/stdc++.h>
using namespace std;
int a[1000003]; 
int c[1000003];
int main(){
    int n,x,b;
    cin>>n>>x;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        c[i]=-1;
    }
    for(int i=1;i<=x;i++){
        cin>>b;
        int L=1,R=n,mid,cnt=0;
        while(L<=R){
            mid=(L+R)/2;
            if(a[mid]==b){
                c[i]=mid;
                break;
            }
            else if(a[mid]<b) L=mid+1;
            else R=mid-1;
        }
    }
    for(int i=1;i<=x;i++) cout<<c[i]<<" "; 
    return 0;
}

就是这里。

谢谢啦!


by liuye20100123 @ 2024-11-05 22:11:09

c数组没必要,边查找边输出就行了。


by zzz13579zzz @ 2024-11-05 22:36:42

#include<bits/stdc++.h>
using namespace std;
#define mid (L+R>>1)
int a[1000010],n,x,b,L,R;
signed main(){
    cin>>n>>x;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=x;i++){
        cin>>b;L=1,R=n;
        while(L<=R){if(a[mid]<b)L=mid+1;else R=mid-1;}
        cout<<(a[L]==b?L:-1)<<' ';
    }return 0;
}

by ssine233 @ 2024-11-05 22:48:40

@Prince0618 有可能二分结束了但是你没给 c[i] 赋值


by Prince0618 @ 2024-11-06 19:55:11

@ssine233 谢谢大佬,已关(能关一下我嘛)


|