zoukankan      html  css  js  c++  java
  • 【深基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;

  • 相关阅读:
    什么是Swap Chain【转自MSDN】
    【转】Foobar 2000设置replay gain
    openGL library下载地址
    C++函数返回含堆数据的对象时,内存释放问题
    [原]VS2008安装boost的lib库
    【转】水木社区VIM版版友推荐插件列表
    Css学习总结(1)——20个很有用的CSS技巧
    Css学习总结(1)——20个很有用的CSS技巧
    Git学习总结(2)——初识 GitHub
    Git学习总结(2)——初识 GitHub
  • 原文地址:https://www.cnblogs.com/fangzm/p/14198039.html
Copyright © 2011-2022 走看看