zoukankan      html  css  js  c++  java
  • 大理石在哪(Where is the Marble?,UVa 10474)

    现有N个大理石,每个大理石上写了一个非负整数。

    首先把各数从小到大排序,然后回答Q个问题。

    每个问题问是否有一个大理石写着某个整数 x (找第一个), 如果是,还有回答哪个大理石上写着 x 。

    排序后的大理石从左到右编号为1~N。

    样例输入:

    4 1

    2 3 5 1

    5

    5 2

    1 3 3 3 1

    2 3 

    样例输出:

    CASE# 1:

    5 found at 4

    CASE# 2:

    2 not found

    3 found at 3

    分析:

    题目意思很清楚了,先排序,再查找。使用 algorithm 头文件中的 sort 和 lower_bound 很容易完成这两项操作。

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn = 10000;
    
    int main(){
        int n, q, x, a[maxn], kase = 0;
        while(scanf("%d%d",&n,&q)==2 && n)
        {
            printf("CASE# %d:
    ",++kase);
            for(int i=0;i<n;i++) scanf("%d",&a[i]);
            sort(a,a+n);
            while(q--){
                scanf("%d",&x);
                int p = lower_bound(a,a+n,x) - a;//在已排序数组a中寻找x
                printf("%d 
    ",lower_bound(a,a+n,x));
                if(a[p]==x) printf("%d found at %d
    ",x,p+1);
                else printf("%d not found 
    ",x);
            }
        }
        return 0;
    }

    运行效果:

    sort使用数组元素默认的大小比较运算符进行排序,只有在需要安装特殊依据进行排序时才需要传入额外的比较函数

    另外sort可以对任意对象进行排序,不一定是内置类型。如果希望用sort排序,这个类型需要定义小于运算符,或者再排序时传入一个小于函数。

    排序对象可以存在于普通数组里,也可以存在于vector中。

    前者用 sort(a,a+n)的方式调用,后者用 sort(v.begin(), v.end())的方式调用。

    lower_bound的作用是查找 大于或者等于x的第一个位置。

    补充:

    题目地址

  • 相关阅读:
    promise思考
    思考
    前端命名规范化
    location的属性
    underscore里面的debounce与throttle
    nginx使用
    js原形链
    JS中常遇到的浏览器兼容问题和解决方法
    用js刷题的一些坑
    从mixin到new和prototype:Javascript原型机制详解
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/14111505.html
Copyright © 2011-2022 走看看