84分,第一个WA

P2249 【深基13.例1】查找

joewang @ 2023-07-28 22:46:03

本人蒟蒻,啥也不会,求大佬帮忙

#include <bits/stdc++.h>

using namespace std;

long long n,m,a[1000010],b[100010];

long long fun(long long l,long long r,long long t)
{
    long long mid=(l+r)/2;
    if(l>r)
    {
        return -1;
    }
    if(a[mid]<t)
    {
        fun(mid+1,r,t);
    }
    else if(a[mid]>t)
    {
        fun(l,mid-1,t);
    }
    else if(a[mid-1]==t)
    {
        fun(l,mid-1,t);
    }
    else
    {
        return mid;
    }
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=m;i++)
    {
        cin>>b[i];
    }
    for(int i=1;i<=m;i++)
    {
        if(i!=1)
        {
            cout<<" ";
        }
        cout<<fun(1,n,b[i]);
    }
    cout<<endl;
    return 0;
}

by Legsi @ 2023-07-29 22:02:46

要求输出这个数字在序列中第一次出现的编号 注意:是第一次


by joewang @ 2023-07-31 19:50:27

else if(a[mid-1]==t)
    {
        fun(l,mid-1,t);
    }

不是判断了吗???


by HKaneW @ 2023-08-12 17:42:57

如果查找的数字是0, 那么mid=1时, a[mid-1]=0


by joewang @ 2023-10-03 08:24:57

@HKaneW 谢谢大佬,AC了


|