博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1011: [HNOI2008]遥远的行星
阅读量:6814 次
发布时间:2019-06-26

本文共 2068 字,大约阅读时间需要 6 分钟。

1011: [HNOI2008]遥远的行星

Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge
Submit: 2241  Solved: 793
[][]

Description

直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行星都只受到距离遥远的行星的作用。请计算每颗行星的受力,只要结果的相对误差不超过5%即可.

Input

第一行两个整数N和A. 1<=N<=10^5.0.01< a < =0.35 

接下来N行输入N个行星的质量Mi,保证0<=Mi<=10^7

Output

N行,依次输出各行星的受力情况

Sample Input

5 0.3
3
5
6
2
4

Sample Output

0.000000
0.000000
0.000000
1.968750
2.976000

HINT

 

精确结果应该为0 0 0 2 3,但样例输出的结果误差不超过5%,也算对

 

Source

 

 题解:呵呵呵呵呵。。。感觉自己真心捉鸡——
从来就只知道只有物理竞赛化学竞赛里面会用近似处理,没想到这里也近似。
大致思路就是先进行分段处理,然后小的部分暴力,大的部分近似处理,有效的利用了题目中所给的误差不超过5%呵呵哒^_^
接下来开始引用(感觉省选现场能A掉此题的都是神OTL,这个近似真心略诡异啊)

设f[i]为第i个行星受到的引力,g[i]表示第i个行星所受引力的最后来源行星

HNOI2008】遥远

【BZOJ1011

然后小范围(我是取 α * 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 var12     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 begin17     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 do22         begin23             if a[i]<>0 then a[i]:=0;24             if c[i]<>0 then25                 begin26                     if i<=st then27                         begin28                             for j:=1 to c[i] do a[i]:=a[i]+b[j]/(i-j);29                             a[i]:=a[i]*b[i];30                         end31                     else32                         begin33                             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.

 

转载于:https://www.cnblogs.com/HansBug/p/4311857.html

你可能感兴趣的文章
enq: US - contention等待事件
查看>>
NDK图形函数在某些机型下显示花屏的问题
查看>>
Dojo学习笔记(十三):Dojo表单控件——TextBox及其变体
查看>>
一文搞懂HMM(隐马尔可夫模型)
查看>>
使用python和批处理bat脚本ping检测主机连通性
查看>>
MaxScale Binlog Server
查看>>
Python3下OpenCV的安装
查看>>
Qpid第四课 异常以及崩溃
查看>>
C# 调用C++接口
查看>>
【系列4】使用Dockerfile创建带tomcat的Centos Docker镜像
查看>>
webservice返回子类
查看>>
MySQL数据管理1
查看>>
kernel对于SO_REUSEADDR的处理——避免滥用引发Bug
查看>>
Saltstack SLS文件解读
查看>>
LiveUSB像光驱LiveCD一样启动
查看>>
Linux利用sendmail和fetion发送报警通知
查看>>
C/C++中一次性执行多个DOS命令
查看>>
(转载)经典SQL语句大全3-技巧篇
查看>>
在SSIS包中使用 Checkpoint从失败处重新启动包
查看>>
关于项目自动化测试架构的改良计划 - 解析XInclude标记
查看>>