一:题目
现有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
二:代码实现
#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的第一个位置