解题:ZJOI 2014 力
事实说明只会FFT板子是没有用的,还要把式子推成能用FFT/转化一下卷积的方式
虽然这个题不算难的多项式卷积
稍微化简一下可以发现实际是$q_i$和$\frac{1}{(i-j)^2}$在卷,然后每两项是在向下标差值的那项做贡献,而直接卷是向两项下标和的那项做贡献。于是把前半部分的$\frac{1}{(i-j)^2}$做成负的,后半段的做成正的,这样卷完后半段就是题目要求的东西。当然把一个序列反过来再卷也是对的
- #include<cmath>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=,M=;
- const double pai=acos(-);
- struct cpx
- {
- double x,y;
- }a[N],b[N];
- int n,m,nm,rev[N];
- double Sin[M],Cos[M];
- cpx operator + (cpx a,cpx b)
- {
- return (cpx){a.x+b.x,a.y+b.y};
- }
- cpx operator - (cpx a,cpx b)
- {
- return (cpx){a.x-b.x,a.y-b.y};
- }
- cpx operator * (cpx a,cpx b)
- {
- double x1=a.x,x2=b.x,y1=a.y,y2=b.y;
- return (cpx){x1*x2-y1*y2,x1*y2+x2*y1};
- }
- int Log2(int len)
- {
- return (int)(log(len)/log()+0.5);
- }
- void prework()
- {
- register int i;
- scanf("%d",&n),nm=n<<;
- for(i=;i<n;i++) scanf("%lf",&a[i].x);
- for(i=;i<n-;i++) b[i].x=(double)-/(n-i-)/(n-i-);
- for(i=n;i<nm-;i++) b[i].x=(double)/(i-n+)/(i-n+);
- m=; while(m<=nm) m<<=;
- for(i=;i<=;i++)
- Sin[i]=sin(*pai/(<<i)),Cos[i]=cos(*pai/(<<i));
- for(i=;i<m;i++)
- rev[i]=(rev[i>>]>>)+(i&)*(m>>);
- }
- void transform(cpx *c,int t)
- {
- register int i,j,k;
- for(i=;i<m;i++)
- if(rev[i]>i) swap(c[i],c[rev[i]]);
- for(i=;i<=m;i<<=)
- {
- int len=i>>;
- cpx omg={Cos[Log2(i)],Sin[Log2(i)]*t};
- for(j=;j<m;j+=i)
- {
- cpx ori={,},tmp;
- for(k=j;k<j+len;k++)
- {
- tmp=ori*c[k+len],ori=ori*omg;
- c[k+len]=c[k]-tmp,c[k]=c[k]+tmp;
- }
- }
- }
- }
- int main()
- {
- register int i;
- prework(),transform(a,),transform(b,);
- for(i=;i<m;i++) a[i]=a[i]*b[i];
- transform(a,-);
- for(i=n-;i<nm-;i++) printf("%f\n",a[i].x/m);
- return ;
- }
解题:ZJOI 2014 力的更多相关文章
- [ZJOI 2014]力
Description 给出n个数qi,给出Fj的定义如下: $$F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j}\frac{q_i ...
- 【BZOJ 3527】【ZJOI 2014】力
代换一下变成多项式卷积,这里是的答案是两个卷积相减,FFT求一下两个卷积就可以啦 详细的题解:http://www.cnblogs.com/iwtwiioi/p/4126284.html #inclu ...
- 【ZJOI 2014】力
Problem Description 给出 \(n\) 个数 \(q_i\),给出 \(F_j\) 的定义如下: \[F_j=\sum_{i<j} \frac{q_iq_j}{(i-j)^2} ...
- ZJOI 2014 星系调查(推导)
题意 https://loj.ac/problem/2201 思路 说白了就是一条路径上有 \(n\) 个二维坐标,求一条直线使得所有点到此直线的距离和最小. 设这条直线为 \(y=kx+b\) ,距 ...
- php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库、PDO教程]
php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库.PDO教程] 第14章 数据库252.[2014]兄弟连高洛峰 PHP教程14.1.1 复习数据库[已发布,点击下载]253. ...
- Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告
Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...
- php大力力 [016节] 兄弟连高洛峰php教程(2014年 14章数据库章节列表)
2015-08-25 php大力力016 兄弟连高洛峰php教程(2014年 14章数据库章节列表) [2014]兄弟连高洛峰 PHP教程14.1.1 复习数据库 15:58 [2014]兄弟连高洛 ...
- 2014 ACM/ICPC 鞍山赛区现场赛 D&I 解题报告
鞍山现场赛结束了呢-- 我们出的是D+E+I三道题-- 吾辈AC掉的是D和I两道,趁着还记得.先在这里写一写我写的两道水题D&I的解题报告吧^_^. D题的意思呢是说星云内有一堆排成一条直线的 ...
- Hackerrank 2020 February 2014 解题报告
Hackerrank 2020 February 2014 解题报告 比赛链接 Sherlock and Watson (20分) 题意:给定一个数组,向右平移K次,然后有Q个询问,问第x位置上是几 ...
随机推荐
- 十几行代码带你用Python批量实现txt转xls,方便快捷
前天看到后台有一兄弟发消息说目前自己有很多txt 文件,领导要转成xls文件,问用python怎么实现,我在后台简单回复了下,其实完成这个需求方法有很多,因为具体的txt格式不清楚,当然如果是有明确分 ...
- Spring学习(3):Spring架构(转载)
1. Spring架构图 核心容器:包括Core.Beans.Context.EL模块. ●Core模块:封装了框架依赖的最底层部分,包括资源访问.类型转换及一些常用工具类. ●Beans模块:提供了 ...
- Parcel 打包器简单使用记录
本文是构造 UI 轮子过程中搭建项目初始化时使用 Parcel 作为打包器的简要使用记录. 安装 参考 官方文档 使用 npm 进行 parcel-bundler 的安装. npm i -D parc ...
- Java Basic&Security Tools
JDK Tools and Utilities Basic Tools These tools are the foundation of the JDK. They are the tools yo ...
- 大数据-spark-hbase-hive等学习视频资料
不错的大数据spark学习资料,连接过期在评论区评论,再给你分享 https://pan.baidu.com/s/1ts6RNuFpsnc39tL3jetTkg
- CF刷刷水题找自信 2
CF 1114A Got Any Grapes(葡萄)? 题目意思:给三个人分葡萄,三个人对葡萄的颜色有一些要求,问所准备的三种颜色的葡萄能否满足三人的要求. 解题意思:直接按条件判断即可. #in ...
- Python:生成器的简单理解
一.什么是生成器 在Python中,由于受到内存的限制,列表容量肯定是有限的.例如我们创建一个包含一亿个元素的列表,Python首先会在内存中开辟足够的空间来存储这个包含一亿个元素的列表,然后才允许用 ...
- Rsyslog-legacy(旧版本语法)配置说明及举例
1. RULES-书写规则 格式:日志设备(类型).日志级别 日志处理方式 (1)日志类型分类 auth pam产生的日志 authpriv ssh,ftp等登录信息的验证信息 ...
- 初识ES6 解构
1.数组的解构 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 例子: let [a, b, c] = [1, 2, 3]; console.log(a);//1cons ...
- CCF——数列分段201509-1
问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, …, an,表示 ...