hdu 1214 圆桌会议
/*
分成最接近的两段。
证明如下:
设n为总长度,分为两段,长度分别为a、b。总次数=a*(a-1)/2+b*(b-1)/2=a*(a-1)/2+(n-a)*(n-a-1)/2=(2*a^2-2*n*a+n^2)/2。
其中n为常量,a为变量。二次曲线开口向上,最小值对应的a=-(-2*n)/(2*2)=n/2。显然a要求整数。
*/
//15MS 228K 281 B C++ //开始没思路,看别人的结题报告,化成线性问题来接 //分成最接近的两段做类似冒泡的移动 #include<stdio.h> int main(void) { int n; while(scanf("%d",&n)!=EOF) { int m=n/2; n-=m; printf("%d\n",n*(n-1)/2+m*(m-1)/2); } return 0; }