题意:
读入一行2个数字 N 和 Q, N 表示接下来的 N 行数字为 marbles, Q 表示 N 行数字之后的 Q 行数字为 query. 要求把 N 行 marbles 从小到大排序, 然后输出每个 Q 在 marbles 中的位置.
思路:
把读入的 marbles 和 queries 都存放在 vector 里, 然后排序, 再逐个查找进行输出即可.
要点:
使用 sort(marbles.begin(), marbles.end(), less<int>()); 从小到大进行排序.
代码:
# include <iostream>
# include <string>
# include <cstdio>
# include <cstring>
# include <vector>
# include <algorithm>
# include <cctype>
# include <iterator>
# include <assert.h>
using namespace std;
// 使用 sort 排序
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("10474_i.txt", "r", stdin);
freopen("10474_o.txt", "w", stdout);
#endif
int numCase = 0;
while (!cin.eof()) {
int numMarbles;
int numQueries;
cin >> numMarbles >> numQueries;
if (numMarbles == 0 && numQueries == 0)
break;
cout << "CASE# " << ++numCase << ":" << endl;
vector<int> marbles;
vector<int> queries;
int temp;
for (int i=0; i<numMarbles; i++) {
cin >> temp;
marbles.push_back(temp);
}
for (int i=0; i<numQueries; i++) {
cin >> temp;
queries.push_back(temp);
}
sort(marbles.begin(), marbles.end(), less<int>());
for (int i=0; i<numQueries; i++) {
vector<int>::iterator it = find(marbles.begin(), marbles.end(),
queries[i]);
if (it == marbles.end()) {
cout << queries[i] << " not found" << endl;
} else {
cout << queries[i] << " found at " << it - marbles.begin() + 1 << endl;
}
}
} // end of while
return 0;
}
环境: C++ 4.5.3 - GNU C++ Compiler with options: -lm -lcrypt -O2 -pipe -DONLINE_JUDGE