UVA10474大理石マーブルはどこにあるのはどこ?

UVA10474大理石マーブルはどこにあるのはどこ?




問題の意味の翻訳
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を決定するための鍵は、いくつかの最初ですので、
意味のトピックは非常に明確である:ソートに、もう一度検索。ソートアルゴリズムのヘッダーファイルを使用し、両方を行う簡単LOWER_BOUND
見つけるための
binary_searchを():名前が示唆しているバイナリ検索が、この機能は非常にTDの質問を持っているとして、その戻り値はbool型のものであり、そこで提供しましたコンテナシーケンス。

ここではその説明は次のとおりです。「内部要素の値に最初、最後同等の[)がある場合binary_searchは)[最初、最後のソートされた要素の値を見つけようと、それはそれ以外の場合はfalseを返し、trueを返しますが、それは戻りません。 「場所を探します

LOWER_BOUND():
..「ソートされた値の要素を見つけようとLOWER_BOUND()最初、最後)の要素に相当する値を有する)最初、最後の場合に前記第1のIF要素、LOWER_BOUND点にイテレータを返しますそのような要素が存在しないが、それは「位置が存在することになる、そのような要素が存在すると仮定する戻ります

Muttは:です。「の値が[第より大きい場合、最初の要素を指し、任意の要素の値以上である、最後)、最後のリターンである」
例:1 2 3 5 4 Qではないが、LOWER_BOUNDと戻ります== X決意のニーズが[P]を決定するように以下のポインタ4の第1の位置よりもありません

#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;
} 

おすすめ

転載: www.cnblogs.com/serendipity-my/p/12641003.html