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

来源:互联网 发布:魔兽世界178数据库 编辑:程序博客网 时间:2024/04/30 09:16

UVa 10474 Where is the Marble?(大理石在哪儿)
UVa题目链接
题目名称:大理石在哪
题目描述:
现有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

题目分析:
①输入 第一个数的个数,第二个需要找大理石的个数 输出查找情况
②本题主要需要做两个事,第一个是排序,第二个是查找,所以我们可以把我们输入的数放入一个数组里面,我们先排序,再查找
学习笔记:
①排序问题,我们在古老的密码中就总结了,这里需要强调排列对象放入普通数组中sort(a,a+n)第一个为首地址,第二个为尾地址,这里切记不要写成a+n-1
如果排列对象放入vector中,我们可以用sort(v.begin(), v.end());
②排序之后可以用lower_bound查找大于或等于x的第一个位置。int p = lower_bound(a,a+n, x) - a;这里切记要-a,当然查找的时候我们也可以用以前的方法直接for循环查找
补充下vector(不定长数组):
①它把一些常见的操作封装在vector类型内,a.size()读取它的大小,a.resize()改变大小,a.push_back()向尾部添加元素,a.pop_back()删除最后一个元素
②vector是一个模板类,所以需要用vector<int> a或者 vector<double> b
③vector<int>是一个类似于int a[]的整数数组,而vector<string>就是一个类似string a[]的字符串数组
④vector看上去是一等公民

===============================================================================
参考代码:

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