BZOJ.1011.[HNOI2008]遥远的行星(思路 枚举)
  设当前为\(i\),令\(j=\lfloor a*i\rfloor\),\(1\sim j\) 即为对\(i\)有贡献的行星,这一区间的答案应为$$f[i]=M_i*\sum_{k=1}^j\frac{M_k}{i-k}$$
  因为误差不超过\(5\%\)即可,在这种条件下答案的范围应该非常宽。于是可以将要求的区间分成\(T\)段,每一段的分母\(i-k\)近似用该区间中点的分母表示。即$$f[i]=\sum_{t=1}^T(M_i *\frac{\sum_{k=x}^yM_k}{i-\frac{x+y}{2}})$$
  其中\(x,y\)为每段起点/终点。
  复杂度大概是\(O(a*n^2/T)\)?\(T\)这里取\(150\)了。
  小于\(T\)的暴力计算,大于等于\(T\)的按上式近似计算。(或者\(T\)设得大一点,大于\(T\)的直接\(O(1)\)计算。)
1992kb	3908ms
#include <cstdio>
#include <cctype>
#define gc() getchar()
typedef long long LL;
const int N=1e5+5,T=150;
int n,M[N];
LL sum[N];
double a;
inline int read()
{
	int now=0;register char c=gc();
	for(;!isdigit(c);c=gc());
	for(;isdigit(c);now=now*10+c-'0',c=gc());
	return now;
}
int main()
{
	n=read(),scanf("%lf",&a);
	for(int i=1; i<=n; ++i) sum[i]=sum[i-1]+(M[i]=read());
	double res,mid;
	for(int p,i=1; i<=n; ++i)
	{
		p=int(a*i+1e-8);//一段区间的p会是相同的,也许可以少做乘法优化下常数。。//不 应该没什么用
		res=0;
		if(p<=T){
			for(int j=1; j<=p; ++j)
				res+=1.0*M[j]/(i-j);
		}
		else{
			int lim=p/T*T;
			for(int j=1; j<lim; j+=T)
				res+=1.0*(sum[j+T]-sum[j-1])/(1.0*i-0.5*(j+j+T));
			for(int j=lim+1; j<=p; ++j)
				res+=1.0*M[j]/(i-j);
		}
		printf("%.6lf\n",res*M[i]);
	}
	return 0;
}
												
											BZOJ.1011.[HNOI2008]遥远的行星(思路 枚举)的更多相关文章
- BZOJ 1011 [HNOI2008]遥远的行星
		
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 2559 Solved ...
 - BZOJ 1011 [HNOI2008]遥远的行星 (误差分析)
		
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 4974 Solved ...
 - [BZOJ 1011] [HNOI2008] 遥远的行星 【近似解】
		
题目链接: BZOJ - 1011 题目分析 这道题的特别之处在于,答案可以有5%的误差. 嗯..So? 我还是不会,于是看题解. 神犇的题解就是利用这误差范围求一个近似解. 怎么求近似解呢?假如 g ...
 - 1011: [HNOI2008]遥远的行星
		
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 2241 Solved ...
 - 【BZOJ】1011: [HNOI2008]遥远的行星(近似)
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1011 题意:$f[i] = \sum_{j=1}^{i-1} \frac{M[i]M[j]}{i-j ...
 - bzoj1011 [HNOI2008]遥远的行星
		
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 2480 Solved ...
 - 【bzoj1011】[HNOI2008]遥远的行星
		
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 3711 Solved ...
 - BZOJ1011 [HNOI2008]遥远的行星   【奇技淫巧】
		
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge Submit: 5058 Solve ...
 - [HNOI2008]遥远的行星
		
题目描述 直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行 ...
 
随机推荐
- Spark记录-Scala函数
			
Scala函数 Scala有函数和方法. Scala方法是一个具有名称和签名的类的一部分. Scala中的函数是一个可以分配给变量的完整对象. 函数定义可以出现在源文件中的任何位置. 不带参数的函数 ...
 - bzoj千题计划235:bzoj2448: 挖油
			
http://www.lydsy.com/JudgeOnline/problem.php?id=2448 一遍过,嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎,O(∩_∩)O~ 题意是最小化最大值 设计区间dp dp[i ...
 - BZOJ2301:莫比乌斯反演+二维容斥解决GCD范围计数
			
这个题是刚才刷的第一道反演题的拓展版,加上一个容斥就可以了 #include<cstdio> #include<algorithm> using std::min; ; int ...
 - HDU 2988 Dark roads (裸的最小生成树)
			
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2988 解题报告:一个裸的最小生成树,没看题,只知道结果是用所有道路的总长度减去最小生成树的长度和. # ...
 - HTML5 CSS Reset
			
最近在学习HTML和CSS,发现一个不错的模板,放于此处. /* html5doctor.com Reset Stylesheet v1.6.1 Last Updated: 2010-09-17 Au ...
 - 一个网页的对象抽象之路——po编程 (干货,Java自动化测试)
			
先来看一个在腾讯课堂首页搜索机构的操作步骤: 1:首先打开腾讯课堂的首页:https://ke.qq.com 2:点击课程或机构的下拉选择图标 3:选择机构 4:在搜索框输入要搜索的机构名称 5:点击 ...
 - 在Windows 2008上安装Windows Mobile设备中心
			
我在windows2008系统上安装Microsoft Windows Mobile Device Center v6.1时,老是弹出对话框提示缺少一个Windows Mobile设备中心所需要的Wi ...
 - Linux本地解析文件/etc/hosts说明【原创】
			
windows的域名本地解析文件hosts是可以一个域名对多个IP,如果有一个IP有问题,可以去解析到其他IP Linux的本地解析文件/etc/hosts,是否也可以这样呢.下面做了个测试 先看一下 ...
 - linux根据端口查找进程【原创】
			
如转载请注明地址 1.利用lsof -i:端口号 lsof -i:端口号 [root@01 ~]# lsof -i:8097COMMAND PID USER FD TYPE DEVICE SIZE/O ...
 - 源码安装svn 1.8.9
			
2014年5月25日 12:26:14 需要文件: svn apr apr-util sqlite3 serf svn : http://subversion.apache.org/download/ ...