CF638A Home Numbers 题解
Content
Vasya 的家在一条大街上,大街上一共有 \(n\) 座房子,其中,奇数编号的房子在大街的一侧,从左往右依次编号为 \(1,3,5,7,...,n-1\),偶数编号的房子在大街的另一侧,从左往右依次编号为 \(n,n-2,n-4,n-6,...,2\),Vasya 家的房子的编号为 \(k\),每两个房子的间距都为 \(1\)。已知 Vasya 需要花费 \(1\) 秒的时间开到大街上,并且开 \(1\) 单位的距离需要 \(1\) 秒,请问 Vasya 要多久时间才能够到家?
数据范围:\(1\leqslant k\leqslant n\leqslant 100000,2\mid n\)。
Solution
这题目只需要对房子编号 \(k\) 的奇偶性分类讨论就好。
-
当 \(2\nmid k\),那么可以知道,从 \(1\) 开到 \(k\) 的距离为 \(\dfrac{k-1}{2}\),又因为他需要一秒钟的时间开到大街上,所以总共花的时间就是 \(\dfrac{k-1}{2}+1\)(也就是 \(\left\lfloor\dfrac{k}{2}\right\rfloor+1\),因为在 C++ 中用
k/2+1表示比较方便,毕竟/本来在 C++ 中就是整除符号)。 -
当 \(2\mid k\),那么可以知道,从 \(n\) 开到 \(k\) 的距离为 \(\dfrac{n-k}{2}\),又因为他需要一秒钟的时间开到大街上,所以总共花的时间就是 \(\dfrac{n-k}{2}+1\)。
若觉得我的讲解有误,请仔细看上面的数据范围。
Code
#include <cstdio>
using namespace std;
int n, k;
int main() {
scanf("%d%d", &n, &k);
if(k % 2) printf("%d", k / 2 + 1);
else printf("%d", (n - k) / 2 + 1);
return 0;
}

浙公网安备 33010602011771号