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的第一个位置。

    补充:

    题目地址

  • 相关阅读:
    log4j的配置详解(转)
    不同数据库的driverClassName与url
    http请求报头
    java发生邮件(转)
    使用maven下载源码和doc(转)
    处理表单数据
    VC连接mysql数据库错误:libmysql.lib : fatal error LNK1113: invalid machine 解决方法
    vc6.0连接mysql数据库
    转:Android 判断用户2G/3G/4G移动数据网络
    Linux平台Makefile文件的编写基础入门(课堂作业)
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/14111505.html
Copyright © 2011-2022 走看看