64分求助(必关)
查看原帖
64分求助(必关)
1557225
Miracle640楼主2025/7/25 17:41

WA (不要在意我写的C的代码交的C++)

看起来是把某些有解的情况判无解了

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);//输入
    int n[a],q[b];//序列,查询
    for(int i = 0;i < a;i++)//输入
    {
        scanf("%d",&n[i]);
    }
    for(int i = 0;i < b;i++)//输入
    {
        scanf("%d",&q[i]);
    }
    int l = 0,r = a - 1,m = l + (r - l) / 2;//初始化(多此一举)
    for(int i = 0;i < b;i++)
    {
        l = 0,r = a - 1;//emm……
        if(q[i] == n[l])//第一个就是
        {
            m = 0;//索引0
        }
        else if(q[i] == n[r] && q[i] != n[r - 1])//最后一个是
        {
            m = a - 1;//索引a-1
        }
        else//都不是
        {
            while(n[m] != q[i])//找
            {
                m = l + (r - l) / 2;//计算m
                if(r - l <= 1)//无解(应该吧),注意我的提交记录表示我把有解判成无解了
                {
                    m = -2;//负1 -1 = -2
                    break;//不用找了
                }
                if(q[i] > n[m])//小了
                {
                    l = m;
                }
                else//大了
                {
                    r = m;
                }
            }
            while(m > 0 && n[m - 1] == q[i])//一直往前找
            {
                m--;
            }
        }
        printf("%d ",m + 1);//输出
    }
    return 0;//再见
}

请问各位大佬们哪里错了?

2025/7/25 17:41
加载中...