1. 程式人生 > 其它 >CF638A Home Numbers 題解

CF638A Home Numbers 題解

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\) 的奇偶性分類討論就好。

  1. \(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. \(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;
}