CSU-ACM暑假集训训练1(二分 2015/7/21)

题型1:快速幂

Problem E Rightmost Digit

延拓:细胞分裂,初始状态X,繁殖为固定的模式,写出变换矩阵A,n min后即A^n*X。


题型2:方程数值解

B Can you solve this equation?  

nuclear objective:求方程在[0,100]上的零点

C Strange fuction

nuclear objective:求极值(发现可以求导转化为B题)


题型3:二元、三元方程整数解

F Sacrament of the sum

给定两个序列,问是否可以各取一个数其和为给定的数X。

A+B=X,枚举A,然后二分查找B是否存在。

A Can you find it?

A+B+C=X。

这题单纯枚举AB二分C,1000*500*500*log(500,2),将超时。

我们可以先将A+B整合一下为D,那么问题转化为C+D=X。

这样枚举C,二分D,1000*500*log(500^2,2),规定时间出解。


特别注意:误差控制

 B Can you solve this equation?

For each test case, you should just output one real number(accurate up to 4 decimal places)

注意到代码 if ((r-l)<1e-6) return m;
 对于题目要求精确到N位,那么应至少控制(r-l)<1e-(n+2)。

举列辅证(精确小数点后1位):

若1e-1 l=0.1,r=0.19,m=0.145->0.1,实际精确值为0.16->0.2。WA;

若1e-2 l=0.143,r=0.152,m=0.1475->0.1,实际精确值0.151->0.2。WA;

当<1e-3:对于L,R之间的任意实数小数点后第二位的数值不变,所以小数点后第一位不会因为四舍五入出现错误。

(此处有问题,稍后更正)


 D Pie

两种方法,第一种是先二分出半径最后输体积,第二种直接二分体积。

心得体会:

两种方法本质一样。然而第一种方法虽然半径的精度够高,但是根据体积公式π*r*r*h,体积的精度会造成很大的丢失,需要更加严格的控制精度,否则导致难以通过。例如:精确值R=100.0112,S=10002.24012544,二分值r=100.01只精确2位,s=10002.0001,两种面积保留小数相差太大难以AC。



你可能感兴趣的:(ACM,二分)