学习C++从娃娃抓起!记录下洛谷C++学习和备考过程中的题目,记录每一个瞬间。
附上汇总贴:洛谷刷题C++语言 | 汇总
【题目描述】
DL 算缘分算得很烦闷,所以常常到体育馆去打保龄球解闷。因为他保龄球已经打了几十年了,所以技术上不成问题,于是他就想玩点新花招。
DL 的视力真的很不错,竟然能够数清楚在他前方十米左右每个位置的瓶子的数量。他突然发现这是一个炫耀自己好视力的借口——他看清远方瓶子的个数后从某个位置发球,这样就能打倒一定数量的瓶子。
- ◯◯◯◯◯◯
- ◯◯◯ ◯◯◯◯ ◯
- ◯◯
- ◯ ◯◯ ◯
如上图,每个 “◯◯” 代表一个瓶子。如果 DL 想要打倒 3 个瓶子就在 1 位置发球,想要打倒 4 个瓶子就在 2 位置发球。
现在他想要打倒 m 个瓶子。他告诉你每个位置的瓶子数,请你给他一个发球位置。
【输入】
第一行包含一个正整数 n,表示位置数。
第二行包含 n 个正整数 a i a_i ai ,表示第 i 个位置的瓶子数,保证各个位置的瓶子数不同。
第三行包含一个正整数 Q,表示 DL 发球的次数。
第四行至文件末尾,每行包含一个正整数 m,表示 DL 需要打倒 m 个瓶子。
【输出】
共 Q 行。每行包含一个整数,第 i 行的整数表示 DL 第 i 次的发球位置。若无解,则输出 0。
【输入样例】
5
1 2 4 3 5
2
4
7
【输出样例】
3
0
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, x, q;
map<int, int> a;
int main()
{
cin >> n;
for (int i=1; i<=n; i++) {
cin >> x;
a[x] = i;
}
cin >> q;
for (int i=1; i<=q; i++) {
cin >> x;
if (a.count(x)) cout << a[x] << endl;
else cout << 0 << endl;
}
return 0;
}
【运行结果】
5
1 2 4 3 5
2
4
3
7
0