WA0分求条

1.  二分查找
题目ID:1037必做题100分
最新提交:
Wrong Answer0 分
历史最高:
Wrong Answer80 分
时间限制: 1000ms
空间限制: 262144kB
题目描述
二分查找:输入 n 个从小到大的有序数,使用二分查找给定数 m 是否存在,如果有该数,则从左到右输出第一次出现的位置(计数从1开始),如果没有这样的数输出 0。
注意:待查找数字有若干个。
输入格式
第一行一个整数 n,第二行 n 个整数 ai​表示要查找的有序数列,第三行若干个整数 m i​表示要查找的数字(最多有 
S 个)。
输出格式
对于每一个 mi​ ,输出它第一次出现的位置,用空格间隔,如果不存在,则输出 0。
样例
Input 1
7
1 2 4 4 5 7 9
4 5 2 10
Output 1
3 5 2 0

bsgm你代码被你吃了哪去了?

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int a[N];
int n,x;
int main(){
    cin>>n>>x;
    for(int i = 1;i<=n;i++) cin>>a[i];
    while(cin>>x){
        int l = 1,r = n;
        int ans = -1;
        while(l<=r){
            int mid = (l+r) / 2;
            if(a[mid] >= x){
                ans = mid;
                r = mid - 1;
            }
            else if(a[mid] < x){
                l = mid +1;
            }
        }
        if(a[ans] == x) cout<<l<<"";
        else cout<<0<< " ";
    }
    
    return 0;
}
代码

cin两次x了

7行的cin>>n>>x改成cin>>n

666,+5pts

你似乎也是普及1的

我也刚AC这道题

你把那个While( l<=R)的那个=给删了。

WA0分

l后面的""里面加空格

WA0分

把我说的两个方法都用上

都用了

我试过了AC了,你WA的输出结果多少

??

不要删while(l<=r)里的=

if(ans != -1 && a[ans] == x)

没必要,全按我的改可以AC

  1. cin>>n>>x改成cin>>n;
  2. cout<<l<<""改成
  3. cout<<l" ";

:grinning_face: 全局 int n,x; → int n,m;避开重名覆盖
while(cin>>x)→ while(m–)按次数查询
里面定义 int x; 做每次查询值
判定加 ans!=-1`防止 a[-1] 越界报错
:grinning_face: