Codeforces Round #495 (Div. 2) A. Sonya and Hotels

http://codeforces.com/problemset/problem/1004/A

题意:
土豪开了n家酒店,他希望新建的酒店距离最近的酒店距离=d。
给出n家酒店的坐标,求有几个点可以建新酒店。
注:所有酒店都是在一条直线上。

PS:这里的if有一点巧思,刚好可以应付距离大于2d,等于2d和小于2d三种情况。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 105;
int x[MAXN];

int main() {
int n, d;
cin >> n >> d;
for (int i = 1; i <= n; i++) {
cin >> x[i];
}
int res = 2;
for (int i = 1; i < n; i++) {
if (x[i + 1] - x[i] >= 2 * d) res++;
if (x[i + 1] - x[i] > 2 * d) res++;
}
// 左右2头可以建。
// 距离=2d中间可以建一个
// 如果距离大于2d,可以建2个。
// 不然建不了,因为靠一个距离是d,靠另外一个距离小于d。
cout << res << endl;
return 0;
};

另一种解法:

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 105;
int x[MAXN];

int main() {
int n, d;
cin >> n >> d;
for (int i = 1; i <= n; i++) {
cin >> x[i];
}
int res = 2 * n;
// 2头2个,n个酒店间隔是n-1个,假设都可以建,用2n。
for (int i = 1; i < n; i++) {
if (x[i + 1] - x[i] <= 2 * d) res--;
if (x[i + 1] - x[i] < 2 * d) res--;
}
// 距离小于2d减2个。=2d减一个。
cout << res << endl;
return 0;
};