zoukankan      html  css  js  c++  java
  • UVA10474 大理石在哪儿 Where is the Marble?

    UVA10474 大理石在哪儿 Where is the Marble?




    题意翻译
    现有N个大理石,每个大理石上写了一个非负整数。首先把各数从小到大排序,然后回 答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上 写着x。排序后的大理石从左到右编号为1~N。
    输入输出样例:

    //输入
    4 1     4个大理石      1个问题
    2        2 3 5 1 大理石上写的数字
    3         
    5
    1
    5     这个5是问题      是否有一个大理石写着5     
    5 2
    1
    3
    3
    3
    1
    2
    3
    0 0
    
    //输出
    CASE# 1:
    5 found at 4       注意一定要先排序再判断是第几个     2351  => 1 2 3 5 所以第四个
    CASE# 2:
    2 not found
    3 found at 3
    

    所以本题关键就是排序加判断x是第几个
    题目意思已经很清楚了:先排序,再查找。使用algorithm头文件中的sort和lower_bound 很容易完成这两项操作
    对于查找
    binary_search():顾名思义,二分查找,不过这个函数有个很TD的问题,它的返回值是bool类型的,且前提是有序的容器。

    下面是它的描述:“binary_search试图在已排序的[first, last)中寻找元素value。如果[first, last)内有等价于value的元素,它会返回true,否则返回false,它不返回查找位置”

    lower_bound():
    “lower_bound()它试图在已排序的[first,last)中寻找元素value。如果[first, last)具有等价于value的元素,lower_bound返回一个iterator指向其中第一个元素。如果没有这样的元素存在,它便返回假设这样的元素存在的话,会出现的位置”

    人话便是:“指向第一个不小于value的元素。如果value大于[first, last)的任何一个元素,则返回last”
    举个例子 :1 2 3 5 问4在不在里面,用lower_bound 返回的是第一个不小于4的位置的指针 所以要判断还需要判断a[p]==x

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    const int maxn=10000;
    using namespace std;
    int main()
    {
    	int n,q;
    	int x;
    	int a[maxn];
    	int kase=0;
    	while(cin>>n>>q&&n)
    	{
    		for(int i=0;i<n;i++)
    		{
    			cin>>a[i];
    		}
    		sort(a,a+n); //排序
    		while(q--)
    		{
    			cin>>x;       //要问的那个整数 
    			int p=lower_bound(a,a+n,x)-a; //记录位置,注意:这个函数(对于数组)返回的是那个数的指针,你要减掉数组的指针,才能得到int,(指针相减)
    			cout<<(++kase)<<"# :";
    			if(a[p]==x) printf("%d found at %d
    ", x, p+1);    //判断
    			else printf("%d not found
    ", x);
    		} 
    	}
    	return 0;
    } 
    
  • 相关阅读:
    SqlConnectionStringBuilder
    什么时候使用“静态方法”(转)
    Dos命令下多文件中查找某字符串
    StructLayout(LayoutKind.Sequential)(转)
    DOS批处理高级教程:第四章 批处理中的变量(转)
    DOS批处理高级教程:第一章 批处理基础(转)
    C#各种进制之间数据转换二进制、八进制、十进制、十六进制
    DOS批处理高级教程:第六章 if命令讲解(转)
    ModbusRTU模式和结束符(转)
    DOS批处理高级教程:第七章 DOS批处理编程高级技巧(转)
  • 原文地址:https://www.cnblogs.com/serendipity-my/p/12641003.html
Copyright © 2011-2022 走看看