• 【深基13.例1】查找


    题目描述

     

    输入 n(n106) 个不超过 109 的单调不减的(就是后面的数字不小于前面的数字)非负整数 a1,a2,,an,然后进行m(m105)次询问。对于每次询问,给出一个整数q(q109),要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 -1 。

    输入格式

     

    第一行 2 个整数 n 和 m,表示数字个数和询问次数。

    第二行 n 个整数,表示这些待查询的数字。

    第三行 m 个整数,表示询问这些数字的编号,从 1 开始编号。

    输出格式

     

    m 个整数表示答案。

    输入输出样例

     

    输入
    11 3
    1 3 3 3 5 7 9 11 13 15 15
    1 3 6
    输出
    1 2 -1 
    AC代码:
    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int n,m;
        cin>>n>>m;
        long long a[n+1]={0},b[m+1]={0};
        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++){
            int l=1,r=n;
            while(l<r){
                int mid=(l+r)/2;
                if(a[mid]<b[i]){
                    l=mid+1;
                }else{
                    r=mid;
                }
            }
            if(a[r]!=b[i]){
                cout<<"-1 ";
            }else{
                cout<<l<<" ";
            }
        }
    } 

    WA代码(十分相近):

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int n,m;
        cin>>n>>m;
        long long a[n+1]={0},b[m+1]={0};
        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++){
            int l=1,r=n;
            while(l<r){
                int mid=(l+r)/2;
                if(a[mid]<b[i]){
                    l=mid+1;
                }else{
                    r=mid-1;
                }
            }
            if(a[r]!=b[i]){
                cout<<"-1 ";
            }else{
                cout<<l<<" ";
            }
        }
    } 

     

    让我们看看那出了错误!

    操!——r=mid-1;

    它为何错!——

    (red=r,yellow=l,green=mid)

    第一次:

    执行——r=mid-1;

    第二次:

    执行——r=mid-1;

    第三次:

     

    执行——r=mid-1;

    r=0;

    a[0]=0;

    所以输出的都是-1;

  • 相关阅读:
    struts文件上传,获取文件名和文件类型
    commons-fileupload.jar实现文件上传
    DiskFileItemFactory类的使用
    css控制两个表格的边线重合
    css控制同一个页面的两个表格,一个显示有边框线,而另一个没边框线
    Android无线调试_adbWireless
    Android无线调试(转)
    struts2用到的jar有那些
    Eclipse 中 Could not find *.apk的解决方案
    JavaScript修改注册表
  • 原文地址:https://www.cnblogs.com/fangzm/p/14198039.html
Copyright © 2020-2023  润新知