摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2058观察a+1,a+2…a+d全部相加等于m即(a+1+a+d)*d/2 = m,这里d是平方,我们可以从长度d入手,当a+1,a+2…a+3相加等于m时,即(a+1+a+d)*d/2 = m而a最小是0,所以(d+1)*d/2=m时d去最大值,就是这步把时间复杂度减小的。d就是sqrt(2*m),(a+1+a+d)*d/2 = m,所以a*d + (d+1)*d/2 = m,所以要使等式成立,m-(d+1)*d/2必须是d的倍数。代码:#include <stdio.h>#include &l 阅读全文
posted @ 2011-08-09 15:55 ○o尐懶錨o 阅读(328) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2073这是一道分段处理题,第一步先把斜率为1的线段处理好:sum+=a*(a-1)*sqrt(2.0)/2; 第二步把线段斜率不为1的处理好:for(int i=a;i>0;--i)sum+=sqrt(i*i+(i-1)*(i-1)); 第三步把包括该点的线段加入:sum+=(a-y)*sqrt(2.0); 最后用前面的点与后面的点去差的绝对值。。。#include <stdio.h>#include <string.h>#include <stdlib.h>#inc 阅读全文
posted @ 2011-08-09 10:48 ○o尐懶錨o 阅读(428) 评论(0) 推荐(0) 编辑