luogu3338 [ZJOI2014]力
我发现我的构造方法好像不太一样而且比较显然?……先读入 \(q\) 数组(下表从零开始)。
记 \(i < j\) 时,\(a_{i-j}=-1/i^2\);\(i > j\) 时,\(a_{i-j}=1/i^2\);\(i = j\) 时,\(a_{i-j}=0\)。
答案 \(E_i=\sum_{j=0}^{n-1}a_{i-j}q_j\),可以用 FFT 优化,于是就做完了……吗?
发现 \(a\) 的下标可能会为负,那我们就整体平移一下,使得 \(E_i=\sum_{j=0}^{n-1}a_{i-j+n-1}q_j\),那么答案就是 \(E\) 数组的 \(0+n-1 \ldots n-1+n-1\) 项了。(原先是 \(0 \ldots n-1\) 项)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n, lim=1, limcnt, rev[524305];
double q[100005];
const double PI=acos(-1.0);
struct Complex{
	double x, y;
	Complex(double u=0.0, double v=0.0){
		x = u; y = v;
	}
	Complex operator+(const Complex &u)const{
		return Complex(x+u.x, y+u.y);
	}
	Complex operator-(const Complex &u)const{
		return Complex(x-u.x, y-u.y);
	}
	Complex operator*(const Complex &u)const{
		return Complex(x*u.x-y*u.y, x*u.y+y*u.x);
	}
}a[524305], b[524305];
void fft(Complex a[], int opt){
	for(int i=0; i<lim; i++)
		if(i<rev[i])
			swap(a[i], a[rev[i]]);
	for(int i=2; i<=lim; i<<=1){
		int tmp=i>>1;
		Complex wn=Complex(cos(2*PI/i), opt*sin(2*PI/i));
		for(int j=0; j<lim; j+=i){
			Complex w=Complex(1.0, 0.0);
			for(int k=0; k<tmp; k++){
				Complex tmp1=a[j+k], tmp2=w*a[j+k+tmp];
				a[j+k] = tmp1 + tmp2;
				a[j+k+tmp] = tmp1 - tmp2;
				w = w * wn;
			}
		}
	}
	if(opt==-1)
		for(int i=0; i<lim; i++)
			a[i].x /= lim;
}
int main(){
	cin>>n;
	for(int i=0; i<n; i++)
		scanf("%lf", &b[i].x);
	for(int i=-n+1; i<=n-1; i++){
		if(i<0)
			a[i+n-1].x = -1.0 / i / i;
		else if(i==0)
			a[i+n-1].x = 0;
		else
			a[i+n-1].x = 1.0 / i / i;
	}
	while(lim<=3*(n-1))	lim <<= 1, limcnt++;
	for(int i=0; i<lim; i++)
		rev[i] = (rev[i>>1]>>1) | ((i&1)<<(limcnt-1));
	fft(a, 1);
	fft(b, 1);
	for(int i=0; i<lim; i++)
		a[i] = a[i] * b[i];
	fft(a, -1);
	for(int i=0; i<n; i++)
		printf("%.12f\n", a[i+n-1].x);
	return 0;
}
luogu3338 [ZJOI2014]力的更多相关文章
- [ZJOI3527][Zjoi2014]力
		[ZJOI3527][Zjoi2014]力 试题描述 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi.试求Ei. 输入 包含一个整数n,接下来n行每行输入一个数,第i行表示qi. 输出 有n ... 
- bzoj3527: [Zjoi2014]力 fft
		bzoj3527: [Zjoi2014]力 fft 链接 bzoj 思路 但是我们求得是 \(\sum\limits _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ... 
- 洛谷 P3338 [ZJOI2014]力 解题报告
		P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \(F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j ... 
- 【BZOJ 3527】 3527: [Zjoi2014]力 (FFT)
		3527: [Zjoi2014]力 Time Limit: 30 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 2003 Solved: 11 ... 
- [洛谷P3338] [ZJOI2014]力
		洛谷题目链接:P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \[F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_ ... 
- P3338 [ZJOI2014]力(FFT)
		题目 P3338 [ZJOI2014]力 做法 普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\) 其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略 ... 
- [Luogu P3338] [ZJOI2014]力 (数论 FFT 卷积)
		题面 传送门: 洛咕 BZOJ Solution 写到脑壳疼,我好菜啊 我们来颓柿子吧 \(F_j=\sum_{i<j}\frac{q_i*q_j}{(i-j)^2}-\sum_{i>j} ... 
- 笔记-[ZJOI2014]力
		[ZJOI2014]力 \[\begin{split} E_j=&\sum_{i=1}^{j-1}\frac{q_i}{(i-j)^2}-\sum_{i=j+1}^{n}\frac{q_i}{ ... 
- 【Bzoj3527】【Luogu3338】[Zjoi2014]力(FFT)
		题面 Bzoj Luogu 题解 先来颓柿子 $$ F_i=\sum_{j<i}\frac{q_iq_j}{(i-j)^2}-\sum_{j>i}\frac{q_iq_j}{(i-j)^2 ... 
随机推荐
- CocoStudio UIButton setPressedActionEnabled(true) 子控件不跟着缩放
			具体情况是这样的:美术给了我 一个按钮的背景图片 一个按钮的文字图片,用背景图片创建一个button,然后把文字图片添加进去(注意关闭文字图片的交互功能) 设置UIButton setPressed ... 
- zabbix 监控项
			监控项 概述 监控项是从主机收集的数据信息. 配置主机后,你需要添加一些监控项以开始获取实际数据. 一个监控项是一个独立的指标.快速添加多个监控项的一种方法是将一个预定义的模板附加到主机.然而,为了优 ... 
- ELF interpreter /libexec/ld-elf32.so.1 not found
			ELF interpreter /libexec/ld-elf32.so.1 not found错误, 其实就是在64位平台上运行32位软件的不兼容造成的.找个64的包安装就上ok了. 
- DOM编程艺术-setTimeout,"moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"
			DOM编程艺术一个小demo,看到这里的时候不理解 "moveElement('"+elementID+"',"+final_x+","+f ... 
- Finite Encyclopedia of Integer Sequences(找规律)
			6617: Finite Encyclopedia of Integer Sequences 时间限制: 1 Sec 内存限制: 128 MB提交: 375 解决: 91[提交] [状态] [讨论 ... 
- Cesium专栏-测量工具测距、测面、测高(附源码下载)
			Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ... 
- C#继承机制 访问与隐藏基类成员
			(1) 访问基类成员 通过base 关键字访问基类的成员: 调用基类上已被其他方法重写的方法. 指定创建派生类实例时应调用的基类构造函数. 基类访问只能在构造函数.实例方法或实例属性访问器中进 ... 
- Wordpress菜单函数wp_nav_menu各参数详解及示例
			Wordpress菜单函数wp_nav_menu各参数详解及示例 注册菜单 首先要注册菜单,将以下函数添加至function.php函数里 register_nav_menus(array( ... 
- 文档处理jQuery,实现添加删除复制
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- SpringMVC解决前台传入的数组或集合类型数据
			1前台处理如下: $.ajax({ url:"saveMapInfo", type:"POST", dataType:"json", con ... 
