题目描述:
小朋友出操,按学号从小到大排成一列;小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。算法复杂度要求不高于nLog(n);学号为整数类型,队列规模<=10000;
输入描述:
1、第一行:输入已排成队列的小朋友的学号(正整数),以","隔开;例如:93 95 97 100 102 123 155
2、第二行:小明学号,如 110;
输出描述:
输出一个数字,代表队列位置(从 1 开始)。
例如:6
示例 1:
输入
93 95 97 100 102 123 155
110
输出
6
C++源码:
cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
using namespace std;
int main() {
string line;
getline(cin, line); // 读取第一行的学号序列
vector<int> queue;
stringstream ss(line);
int num;
while (ss >> num) {
queue.push_back(num);
if (ss.peek() == ',') ss.ignore();
}
int ming; // 小明的学号
cin >> ming;
// 使用二分查找法找到小明的位置
auto it = lower_bound(queue.begin(), queue.end(), ming);
int position = it - queue.begin() + 1; // 计算队列位置(从1开始)
cout << position << endl;
system("pause");
return 0;
}