1. 程式人生 > >Newcoder 58 A.旅遊觀光(構造)

Newcoder 58 A.旅遊觀光(構造)

Description

nn個地方,編號為1n1\rightarrow n,任意兩個地方有公交車,從iijj的票價為(i+j)mod(n+1)(i+j)\ mod\ (n+1),而且這個票可以用無限次,你要把這些地方全部走一遍,問最小花費為多少。可以在任意地方開始和結束。

Input

第一行一個數nn

(1n105)(1\le n\le 10^5)

Output

輸出一行一個數表示答案

Sample Input

10

Sample Output

4

Solution

滿足(i+j)mod(n+1)=0,ij(i+j)\ mod\ (n+1)=0,i\neq j

的二元組(i,j)(i,j)至多n2\lfloor\frac{n}{2}\rfloor個,這些二元組之間的過渡每次至少需要11個代價,故答案下界為n12\lfloor\frac{n-1}{2}\rfloor(需要分奇偶討論一下),而我們只需要按下面的方式構造即可

(1,n)(2,n1)...(i,n+1i)(i+1,ni)...(1,n)\rightarrow (2,n-1)\rightarrow...\rightarrow (i,n+1-i)\rightarrow (i+1,n-i)\rightarrow...

故該下界可以取到,答案為n12\lfloor\frac{n-1}{2}\rfloor

Code

#include<cstdio>
using namespace std;
int main()
{
	int n;
	scanf("%d",&n);
	printf("%d\n",(n-1)/2);
	return 0;
}