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\n", x, p+1);    //判断
			else printf("%d not found\n", x);
		}
	}
	return 0;
}

原文地址:https://www.cnblogs.com/serendipity-my/p/12641003.html

时间: 2024-10-08 15:32:39

UVA10474 大理石在哪儿 Where is the Marble?的相关文章

uva10474大理石在哪儿where is the marble?

背景:做了这么久的题,唯一一道一次ac的,可见这道题是如何的简单. 思路:思路很清楚的模拟题,先排序再查找. 学习:sort函数和lower_bound函数,sort函数排序就不多说了,lower_bound函数作用是查找一个数组中大于等于x的第一个位置. #include <iostream> #include <stdio.h> #include <algorithm> using namespace std; int figue[10000]; void prin

UVA10474 Where is the Marble?

问题链接:UVA10474 Where is the Marble?. 题意简述:输入n个整数,代表大理石编号:再输入q个数(编号),问是否有这个编号的大理石,位置在哪里? 这个问题用C++语言编写程序,主要是为了练习使用STL的功能. 程序中,使用了算法库(algorithm)中的两个函数:使用sort()函数用于对数据排序,该函数的参数比C语言的同类函数简单,程序更加易于书写:使用函数lower_bound()查找元素,简单方便. AC的C++语言程序如下: /* UVA10474 Wher

排序与检索【UVa10474】Where is the Marble?

Where is the Marble?  Description Raju and Meena love to play with Marbles. They have got a lot of marbles with numbers written on them. At the beginning, Raju would place the marbles one after another in ascending order of the numbers written on the

大理石在哪儿(UVa10474)

题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=835&page=show_problem&problem=1415 C++ 11代码如下: 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int num[10000]; 5 int mai

大理石在哪儿 UVa10474

现有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 //UVa 10474

UVa10474 Where is the Marble ? 有序数组二分找值 lower_bound / upper_bound

题意: 给出n个数,先把各数从小到大排序,然后q次询问xi在数组中的位置,不存在则输出相应信息. 输入样例: 4 1 2 3 5 1 5 5 2 1 3 3 3 1 2 3 0 0 输出样例: CASE# 1: 5 found at 4 CASE# 2: 2 not found 3 found at 3 //======================================= 数组从小到大有序. lower_bound :查找"大于或者等于x"的第一个位置. upper_bo

UVA10474 Where is the Marble?【排序】

参考:https://blog.csdn.net/q547550831/article/details/51326321 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 #define N 10000 6 int main() 7 { 8 int n,q,count=0; 9 10 while (scanf("%d %d"

大理石在哪儿 (Where is the Marble?,UVa 10474)

题目描述:算法竞赛入门经典例题5-1 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int maxn = 10000 ; 5 int main() 6 { 7 int n,q,a[maxn] ,k=0; 8 while(scanf("%d%d",&n,&q)==2 && n &&q){ 9 for(int i=0;i<

【UVA - 10474 】Where is the Marble?(排序)

Where is the Marble? Descriptions: Raju and Meena love to play with Marbles. They have got a lot of marbles with numbers written on them. At the beginning, Raju would place the marbles one after another in ascending order of the numbers written on th