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; }

 

posted @ 2013-09-13 14:47  heaventouch  阅读(98)  评论(0编辑  收藏  举报