直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行星都只受到距离遥远的行星的作用。请计算每颗行星的受力,只要结果的相对误差不超过5%即可.
标签:
直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行星都只受到距离遥远的行星的作用。请计算每颗行星的受力,只要结果的相对误差不超过5%即可.
第一行两个整数N和A. 1<=N<=10^5.0.01< a < =0.35
接下来N行输入N个行星的质量Mi,保证0<=Mi<=10^7
N行,依次输出各行星的受力情况
精确结果应该为0 0 0 2 3,但样例输出的结果误差不超过5%,也算对
设f[i]为第i个行星受到的引力,g[i]表示第i个行星所受引力的最后来源行星
然后小范围(我是取 α * i < 9)暴力搞,大范围就乱搞,忽略除数(i - j)的差距
1 /************************************************************** 2 Problem: 1011 3 User: HansBug 4 Language: Pascal 5 Result: Accepted 6 Time:2296 ms 7 Memory:1984 kb 8 ****************************************************************/ 9 10 const st=50; 11 var 12 i,j,k,l,m,n:longint; 13 p:extended; 14 b,c:array[0..100010] of longint; 15 a:array[0..100010] of extended; 16 begin 17 readln(n,p); 18 for i:=1 to n do read(b[i]); 19 readln; 20 for i:=1 to n do c[i]:=trunc(i*p); 21 for i:=1 to n do 22 begin 23 if a[i]<>0 then a[i]:=0; 24 if c[i]<>0 then 25 begin 26 if i<=st then 27 begin 28 for j:=1 to c[i] do a[i]:=a[i]+b[j]/(i-j); 29 a[i]:=a[i]*b[i]; 30 end 31 else 32 begin 33 a[i]:=(a[i-st]/b[i-st])*((i-st-(c[i-st]/2))/(i-(c[i-st]/2))); 34 for j:=c[i-st]+1 to c[i] do a[i]:=a[i]+b[j]/(i-j); 35 a[i]:=a[i]*b[i]; 36 end; 37 end; 38 end; 39 for i:=1 to n do writeln(a[i]:0:6); 40 readln; 41 end.
标签:
原文地址:http://www.cnblogs.com/HansBug/p/4311857.html