题型1:快速幂
延拓:细胞分裂,初始状态X,繁殖为固定的模式,写出变换矩阵A,n min后即A^n*X。
题型2:方程数值解
B Can you solve this equation?
nuclear objective:求方程在[0,100]上的零点
nuclear objective:求极值(发现可以求导转化为B题)
题型3:二元、三元方程整数解
给定两个序列,问是否可以各取一个数其和为给定的数X。
A+B=X,枚举A,然后二分查找B是否存在。
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。