ps:感觉纯数学题.....我的思路就是找规律,发现dp(x+y) 就是 (0,x+y)的值,然后再加上x*根号2.就是他的距离。然后两个距离相减的绝对值就是两个点之间的距离了.
代码:
#include "stdio.h" #include "math.h" int N; double dp[110]; double cal(int x,int y){ double ll; if(x+y==0) return 0.0; ll=dp[x+y]; ll+=x*sqrt(2); return ll; } int main(){ int x1,x2,y1,y2,i; double ll; dp[0]=0.0; dp[1]=1.0; for(i=2;i<210;i++){ dp[i]=dp[i-1]+sqrt(i*i+(i-1)*(i-1))+sqrt(2*pow(i-1,2)); } scanf("%d",&N); while(N--){ scanf("%d%d%d%d",&x1,&y1,&x2,&y2); ll=fabs(cal(x1,y1)-cal(x2,y2)); printf("%.3lf\n",ll); } return 0; }