Chanming 队长最讨厌浮点型的数据,如果要加入GDUTACM校队,就必须要注意队长的个人癖好,不要触犯,否则你早晚有一天死在他的魔爪之下呦。好啦,我现在教给你一种处理数据的方法,如果chanming队长给了你2*n 个数,按顺序标记为 A1, A2,A3……A 2n。<o:p></o:p>
处理数据的步骤如下:<o:p></o:p>
1,先选择俩个数i ,j , i不等于j 并且 Ai ,Aj 没有被改变过。<o:p></o:p>
2,然后将 Ai 变成最大且不大于Ai的整数;<o:p></o:p>
3,然后将 Aj 变成最小且不小于 Aj 的整数;<o:p></o:p>
执行N次,你就把小数全改变成了整数。减小了Chanming队长看见小数点发飙的几率。但是,很不幸的告诉你,请不要忽视 Chanming队长的口算能力。所以呢,你需要巧妙的选择i j 组合~~既可以通过我教给你的方法把小数变成整数,又能保证改变之后误差最小。<o:p></o:p>
换句话,记操作后A1+a……A2n 的和为newsum,<o:p></o:p>
操作前A1+a……A2n 和SUM,<o:p></o:p>
| SUM -newsum | 要尽可能的最小,输出最小值。<o:p></o:p>
好吧,给紧张的你举个例子吧~~<o:p></o:p>
6<o:p></o:p>
1.000 1.500 3.000 2.750 4.000 9.000<o:p></o:p>
我呢先傻乎乎选择 i=1,j=5 然后又选择了 i=2,j=4 ,再选i=3,j=6 哎呀,没有可以改变的数字了,哎呀,这样的操作后 得到的就是最小的误差,0.250 <o:p></o:p>
| (1+1+3+3+4+9)-(1.000+1.500+3.000+2.750+4.000+9.000) | =0.250<o:p></o:p>