You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.2 KiB
89 lines
2.2 KiB
2 years ago
|
# Sever the Skyline
|
||
|
|
||
|
### 题目描述
|
||
|
「被废弃的城市」中心有一台「不知所谓的机器」。机器顶端天线上的灯泡隐隐约约地散发着光芒。
|
||
|
|
||
|
云浅发现灯泡每次闪烁后发出的颜色有一定的规律。
|
||
|
|
||
|
具体来说,灯泡每次闪烁后的颜色可以用 $n$ 个二元组 $(a_1,b_1),(a_2,b_2),\cdots,(a_n,b_n)$ 来表示。机器会对每个 $i=1,2,3,\cdots,n$ 闪烁 $a_i$ 次,并且这 $a_i$ 次闪烁发出的颜色都为 $b_i$。
|
||
|
|
||
|
现在云浅想知道,机器第 $m$ 次闪烁后,发出的颜色是什么。
|
||
|
|
||
|
### 输入格式
|
||
|
|
||
|
第一行两个正整数 $n,m$。
|
||
|
|
||
|
第二行 $n$ 个正整数 $a_1,\cdots,a_n$。
|
||
|
|
||
|
第三行 $n$ 个正整数 $b_1,\cdots,b_n$。
|
||
|
|
||
|
### 输出格式
|
||
|
|
||
|
输出一行一个正整数表示答案。
|
||
|
|
||
|
### 数据范围
|
||
|
|
||
|
对于 $100\%$ 的数据,$1\le n\le 10^5,1\le m,a_i,b_i\le 10^9,m\le \sum a_i$。
|
||
|
|
||
|
| 测试点编号 | $n$ | $a_i$ | 其他 |
|
||
|
| :-: | :-: | :-: | :-: |
|
||
|
| $1\sim 3$ | $\le 100$ | $\le 100$ | 无 |
|
||
|
| $4\sim 5$ | $\le 1000$ | $\le 1000$ | 无 |
|
||
|
| $6\sim 8$ | $\le 10^5$ | $\le 10^5$ | $m\le 10^6$ |
|
||
|
| $9\sim 10$ | $\le 10^5$ | $\le 10^9$ | 无 |
|
||
|
|
||
|
<div style="page-break-after: always"></div>
|
||
|
|
||
|
### 题解
|
||
|
找到最小的满足 $a_1+a_2+\cdots+a_k\ge m$ 的 $k$,输出 $b_k$ 即可。
|
||
|
|
||
|
复杂度 $O(n)$。
|
||
|
|
||
|
|
||
|
#### 参考代码
|
||
|
|
||
|
```c++{.line-numbers}
|
||
|
#include <bits/stdc++.h>
|
||
|
#define int long long
|
||
|
using namespace std;
|
||
|
inline int read() {
|
||
|
int x = 0, f = 1;
|
||
|
char c = getchar();
|
||
|
for (; (c < '0' || c > '9'); c = getchar()) {
|
||
|
if (c == '-') {
|
||
|
f = -1;
|
||
|
}
|
||
|
}
|
||
|
for (; (c >= '0'&& c <= '9'); c = getchar()) {
|
||
|
x = x * 10 + (c& 15);
|
||
|
}
|
||
|
return x * f;
|
||
|
}
|
||
|
int n, m;
|
||
|
const int MN = 1e5 + 5;
|
||
|
int a[MN], b[MN];
|
||
|
signed main(void) {
|
||
|
freopen("city.in", "r", stdin);
|
||
|
freopen("city.out", "w", stdout);
|
||
|
n = read();
|
||
|
m = read();
|
||
|
int x = 0;
|
||
|
for (int i = 1; i <= n; i++) {
|
||
|
a[i] = read();
|
||
|
}
|
||
|
for (int i = 1; i <= n; i++) {
|
||
|
b[i] = read();
|
||
|
}
|
||
|
for (int i = 1; i <= n; i++) {
|
||
|
x += a[i];
|
||
|
if (x >= m) {
|
||
|
cout << b[i] << endl;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
<div style="page-break-after: always"></div>
|