杭电ACM 3809的详细解题思路是什么

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 09:53:54
杭电ACM 3809的详细解题思路是什么
xS]o`8Q_eC6n#@F,X %0u&#D0f7dmSJمD{<9y[_ʯGpu{jAhJ͸h:P^#0)?zmuР4 rSyR!;&Òg2,O!._sV}ٮ,$iθdt8VgK=l紪!vӆ>J=fWXeεvx[>-LvwɛzCJո|myCѯVҩiα)Ո24NFhtYwz"?>wZ~PĆ(.p;g!8L&0/-ᩐJJO3bj؇T.KS2浬4+ʫݷ71Fy& <ᄗĂـU+HG81X@ &~s0.Gx%x6{a+.$xG 2~W9Mvb) ׹4Tt(׽D̺?͍iyN۞>/d%ܳʶI8oj1

杭电ACM 3809的详细解题思路是什么
杭电ACM 3809的详细解题思路是什么

杭电ACM 3809的详细解题思路是什么
迭代,原式为
X = x – sqrt(y) (1)
Y = y – sqrt(x) (2)
将(2)带入(1)得:
X = x - sqrt(Y + sqrt(x))
也即:
x = X + sqrt(Y + sqrt(x))
构造f(x) = X + sqrt(Y + sqrt(x))
显然此时所求x即f(x)的不动点 ,于是通过迭代可以找到该不动点(初值设为0).
对于y作同样的处理即可得.
关于不动点理论:http://zh.wikipedia.org/wiki/%E4%B8%8D%E5%8A%A8%E7%82%B9
代码如下:
#include
#include
int main() {
int T ;
scanf("%d" , &T) ;
double X , Y ;
for(int cas = 1 ; cas 1e-9) x = X + sqrt(Y + sqrt(x)) ;
while(fabs(y - (Y + sqrt(X + sqrt(y)))) > 1e-9) y = Y + sqrt(X + sqrt(y)) ;
printf("Case %d: %.6lf %.6lf\n" , cas , x , y) ;
}
return 0 ;
}