Description
有nnn个地方,编号为1→n1\rightarrow n1→n,任意两个地方有公交车,从iii到jjj的票价为(i+j) mod (n+1)(i+j)\ mod\ (n+1)(i+j) mod (n+1),而且这个票可以用无限次,你要把这些地方全部走一遍,问最小花费为多少。可以在任意地方开始和结束。
Input
第一行一个数nnn
(1≤n≤105)(1\le n\le 10^5)(1≤n≤105)
Output
输出一行一个数表示答案
Sample Input
10
Sample Output
4
Solution
满足(i+j) mod (n+1)=0,i≠j(i+j)\ mod\ (n+1)=0,i\neq j(i+j) mod (n+1)=0,i̸=j的二元组(i,j)(i,j)(i,j)至多⌊n2⌋\lfloor\frac{n}{2}\rfloor⌊2n⌋个,这些二元组之间的过渡每次至少需要111个代价,故答案下界为⌊n−12⌋\lfloor\frac{n-1}{2}\rfloor⌊2n−1⌋(需要分奇偶讨论一下),而我们只需要按下面的方式构造即可
(1,n)→(2,n−1)→...→(i,n+1−i)→(i+1,n−i)→...(1,n)\rightarrow (2,n-1)\rightarrow...\rightarrow (i,n+1-i)\rightarrow (i+1,n-i)\rightarrow...(1,n)→(2,n−1)→...→(i,n+1−i)→(i+1,n−i)→...
故该下界可以取到,答案为⌊n−12⌋\lfloor\frac{n-1}{2}\rfloor⌊2n−1⌋
Code
#include<cstdio>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",(n-1)/2);
return 0;
}