洛谷P3338 力
题意:
解:
介绍两种方法。
首先可以把那个最后除的qi拆掉。
①分前后两部分处理。
前一部分可以看做是个卷积。下面的平方不拆开,直接看成gi-j即可。
后一部分按照套路,把循环变量改成从0开始,反转q,之后也是卷积。
②直接构造函数卷积。
题解。
我写的第一种。
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- const int N = ;
- const double pi = 3.1415926535897932384626;
- struct cp {
- double x, y;
- cp(double X = , double Y = ) {
- x = X;
- y = Y;
- }
- inline cp operator +(const cp &w) const {
- return cp(x + w.x, y + w.y);
- }
- inline cp operator -(const cp &w) const {
- return cp(x - w.x, y - w.y);
- }
- inline cp operator *(const cp &w) const {
- return cp(x * w.x - y * w.y, x * w.y + y * w.x);
- }
- }f[N << ], g[N << ], h[N << ];
- int r[N << ];
- inline void FFT(int n, cp *a, int f) {
- for(int i = ; i < n; i++) {
- if(i < r[i]) {
- std::swap(a[i], a[r[i]]);
- }
- }
- for(int len = ; len < n; len <<= ) {
- cp Wn(cos(pi / len), f * sin(pi / len));
- for(int i = ; i < n; i += (len << )) {
- cp w(, );
- for(int j = ; j < len; j++) {
- cp t = a[i + len + j] * w;
- a[i + len + j] = a[i + j] - t;
- a[i + j] = a[i + j] + t;
- w = w * Wn;
- }
- }
- }
- if(f == -) {
- for(int i = ; i <= n; i++) {
- a[i].x /= n;
- }
- }
- return;
- }
- int main() {
- int n;
- scanf("%d", &n);
- n--;
- for(int i = ; i <= n; i++) {
- scanf("%lf", &f[i].x);
- h[n - i].x = f[i].x;
- }
- g[].x = ;
- for(int i = ; i <= n; i++) {
- g[i].x = ((double)()) / i / i;
- }
- int len = , lm = ;
- while(len <= n + n) {
- len <<= ;
- lm++;
- }
- for(int i = ; i <= len; i++) {
- r[i] = (r[i >> ] >> ) | ((i & ) << (lm - ));
- }
- FFT(len, f, );
- FFT(len, g, );
- FFT(len, h, );
- for(int i = ; i <= len; i++) {
- f[i] = f[i] * g[i];
- g[i] = g[i] * h[i];
- }
- FFT(len, f, -);
- FFT(len, g, -);
- for(int i = ; i <= n; i++) {
- printf("%lf\n", f[i].x - g[n - i].x);
- }
- return ;
- }
AC代码
洛谷P3338 力的更多相关文章
- 洛谷 [P3338] 力
FFT \[E_i = F_i / q_i = \sum_{i<j} \frac {q_j} {(i - j)^2} - \sum _{ i > j} \frac{q _ j} {(i - ...
- [洛谷P3338] [ZJOI2014]力
洛谷题目链接:P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \[F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_ ...
- 洛谷 P3338 [ZJOI2014]力 解题报告
P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \(F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j ...
- 【洛谷 P3338】 [ZJOI2014]力(FFT)
题目链接 \[\Huge{E_i=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^{n}\frac{q_j}{(i-j)^2}}\] 设\(A[i]= ...
- 洛谷P3338 [ZJOI2014]力(FFT)
传送门 题目要求$$E_i=\frac{F_i}{q_i}=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^n\frac{q_j}{(j-i)^2}$ ...
- 洛谷 P3338 [ZJOI2014]力
题意简述 读入\(n\)个数\(q_i\) 设\(F_j = \sum\limits_{i<j}\frac{q_i\times q_j}{(i-j)^2 }-\sum\limits_{i> ...
- 【洛谷P3338】力
题目大意:求 \[ E_{j}=\sum_{i<j} \frac{q_{i}}{(i-j)^{2}}-\sum_{i>j} \frac{q_{i}}{(i-j)^{2}} \] 题解:可以 ...
- [bzoj3527] [洛谷P3338] [Zjoi2014]力
Description 给出n个数qi,给出Fj的定义如下: \[ F_j=\sum\limits_{i<j} \frac{q_iq_j}{(i-j)^2} - \sum\limits_{i&g ...
- 「洛谷3338」「ZJOI2014」力【FFT】
题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...
随机推荐
- 【学亮IT手记】jQuery text()/html()回调函数实例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- AdminLTE 前端框架
适合运维平台 后台管理系统 AdminLTE 是一个开源的后台控制面板和仪表盘 WebApp 模板. 这是一个快速的HTML模板,基于CSS框架的引导. 文档: http://adminlte.la ...
- 如何在MAC上运行exe程序
1. 首先下载并运行CrossOver 运行CrossOver需要收费,试用期为14天,运行CrossOver 2. 选择exe应用程序,新建容器,安装exe程序 3.安装成功后,运行exe应用程序启 ...
- Python——Radiobutton,Checkbutton参数说明
anchor : 文本位置: background(bg) : 背景色: foreground(fg) :前景色: borderwidth : 边框宽度: width : 组件的宽度: hei ...
- HJ212 CRC 16 (C#)
算法 CRC16 校验寄存器赋值为 0xFFFF: 取被校验串的第一个字节赋值给临时寄存器: 临时寄存器与 CRC16 校验寄存器的高位字节进行"异或"运算,赋值给 CRC16 校 ...
- 10.Service资源发现
Kubernetes Pods是不可控的.每当一个pod停止后,他不是重启,而是重建.ReplicaSets特别是Pods动态地创建和销毁(例如,当向外扩展或向内扩展时).虽然每个PodIP地址都有自 ...
- python之旅六【第六篇】模块
json和pickle 用于序列化的两个模块json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进行转换 json模块提供了四 ...
- appium 原理解析(转载雷子老师博客)
appium 原理解析 原博客地址:https://www.cnblogs.com/leiziv5/p/6427609.html Appium是 c/s模式的appium是基于 webdriver 协 ...
- 【BZOJ2144】Throw 数论
题目大意 给你三个数\(a,b,c\),每次你可以选择一个数\(s_1\),再选择一个数\(s_2\),把\(s_1\)变成\(2s_2-s_1\),但要求\(s_3\)不在\(s_1\)到\(2s_ ...
- python学习日记(迭代器、生成器)-乱七八糟
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...