CF638A Home Numbers 題解
阿新 • • 發佈:2021-12-21
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}\)
若覺得我的講解有誤,請仔細看上面的資料範圍。
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;
}