一:题目
现有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的第一个位置