算法习题---5.1大理石在哪(UVa10474)

一:题目

现有N个大理石,每个大理石上写了一个非负整数、首先把各数从小到大排序,然后回答Q个问题。
每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上写着x。
排序后的大理石从左到右编号为1
~N。(在样例中,为了节约篇幅,所有大理石的数合并到一行,所有问题也合并到一行。)

(一)样例输入

4 1
2 3 5 1
5
5 2
1 3 3 3 1
2 3

(二)样例输出

CASE# 15 found at 4
CASE# 22 not found
3 found at 3 

二:代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;

#define MAX_LEN 1000
int a[MAX_LEN];

int main()
{
    FILE* fp = freopen("data5_1.in", "r", stdin);
    freopen("data5_1.out", "w", stdout);
    int i = 0,num,c,val,pos;

    while (!feof(fp))
    {
        //输入提示信息
        cout << "CASE# " << ++i << ":" << endl;
        //获取初始信息
        cin >> num >> c;
        for (int j = 0; j < num; j++)
            cin >> a[j];
        //进行排序
        sort(a, a + num);    //看源码 是左闭右开 默认是less升序排序
        //获取查询信息
        for (int j = 0; j < c; j++)
        {
            cin >> val;
            pos = lower_bound(a, a + num, val) - a;
            if (a[pos] == val)
                cout << val << " found at " << pos + 1 << endl;
            else
                cout << val << " not found" << endl;
        }
    }

    freopen("CON", "r", stdin);
    freopen("CON", "w", stdout);
    return 0;
}

(一)sort方法

sort使用数组的默认的大小比较运算符进行排序。其排序规则可以按照需要进行自定义。
sort(a,a+n)可以对数组a[n]进行默认排序
其中sort不止可以对数组排序,他可以对任一对象进行排序,因为sort是一个模板函数

(二)lower_bound方法

lower_bound用于查找大于或者等于x的第一个位置

猜你喜欢

转载自www.cnblogs.com/ssyfj/p/11512131.html