[2016北京集训试题15]项链-[FFT]
Description

Solution
设y[i+k]=y[i]+n。
由于我们要最优解,则假如将x[i]和y[σ[i]]连线的话,线是一定不会交叉的。
所以,$ans=\sum (x_{i}-y_{i+s}+c)^{2}$
拆开得$ans=\sum (x_{i}^{2}+y_{i+s}^{2}+c^{2}-2x_{i}y_{i+s}+2x_{i}c-2y_{i+s}c)$
其中,$x_{i}y_{i+s}$是卷积形式。
我们把经过处理的y数组reverse一下,和x数组进行卷积(这里用ntt似乎会爆常数,fft大法好)。然后针对不同的s,得到以c为未知数的所有常数或系数,ans就是一个二次函数了。c用公式解就可以。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const double pi=acos(-);
struct C
{
double r,i;
friend C operator+(C a,C b){return C{a.r+b.r,a.i+b.i};}
friend C operator*(C a,C b){return C{a.r*b.r-a.i*b.i,a.i*b.r+a.r*b.i};}
friend C operator-(C a,C b){return C{a.r-b.r,a.i-b.i};}
}fx[],fy[];
int rev[];
void fft(C *num,int n,int dft)
{
for (int i=;i<n;i++)
if (i<rev[i]) swap(num[i],num[rev[i]]);
for (int step=;step<n;step<<=)
{
C wn{cos(pi/step),sin(pi/step)*dft};
for (int j=;j<n;j+=step*)//从0开始!
{
C w{,};
for (int k=;k<step;k++,w=w*wn)
{
C x=num[j+k],y=w*num[j+k+step];
num[j+k]=x+y;
num[j+k+step]=x-y;
}
}
}
if (dft==-) for (int i=;i<n;i++) num[i].r/=n;
}
int T,n,k,len,L;
int x[],y[];
ll sumx[],sumy[],sumx2[],sumy2[];
int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&k);
memset(sumx,,sizeof(sumx));
memset(sumy,,sizeof(sumy));
memset(sumx2,,sizeof(sumx2));
memset(sumy2,,sizeof(sumy2));
memset(fx,,sizeof(fx));memset(fy,,sizeof(fy));
for (int i=;i<=k;i++)
{
scanf("%d",&x[i]);
sumx[i]=sumx[i-]+x[i],sumx2[i]=sumx2[i-]+1ll*x[i]*x[i];
}
for (int i=;i<=k;i++)
{scanf("%d",&y[i]);y[k+i]=y[i]+n;}
for (int i=;i<=*k;i++)
sumy[i]=sumy[i-]+y[i],sumy2[i]=sumy2[i-]+1ll*y[i]*y[i]; for (int i=;i<=k;i++) fx[i-].r=x[i];
for (int i=,j=*k;j;i++,j--) fy[i].r=y[j];
len=,L=;
for (;len<*k;len<<=,L++);
L++;len<<=;
for (int i=;i<len;i++) rev[i]=(rev[i>>]>>)|(i&)<<(L-);
fft(fx,len,);fft(fy,len,);
for (int i=;i<len;i++) fx[i]=fx[i]*fy[i];
fft(fx,len,-);
ll re,c,b,ans=1e13;
for (int i=*k-,j=;i>=k;i--,j++)
{
re=fx[i].r+0.2;
re=-*re+sumx2[k]+sumy2[j+k]-sumy2[j];
b=*(sumx[k]-sumy[j+k]+sumy[j]);
c=-b/(*k);
ans=min(ans,k*c*c+c*b+re);
c++;
ans=min(ans,k*c*c+c*b+re);
}
cout<<ans<<endl;
}
}
[2016北京集训试题15]项链-[FFT]的更多相关文章
- [2016北京集训试题15]cot-[分块]
Description Solution 如图,假如我们知道了以任何一个点为顶点的135-180度的前缀和和90-180度的前缀和,我们就可以搞出三角形的面积. 差分.add[i][j]和dev[i] ...
- [2016北京集训试题14]股神小D-[LCT]
Description Solution 将(u,v,l,r)换为(1,u,v,l)和(2,u,v,r).进行排序(第4个数为第一关键字,第1个数为第二关键字).用LCT维护联通块的合并和断开.(维护 ...
- [2016北京集训试题6]mushroom-[bitset]
Description Solution bitset是个好东西啊..强行压位什么的真是够orz. 由于所有的蘑菇上房间的长相是一样的,我们针对每个房间,算出它到根节点的bitset和以它为根的子树的 ...
- [2016北京集训试题6]网络战争-[最小割树(网络流)+kd-tree+倍增]
Description A 联邦国有 N 个州,每个州内部都有一个网络系统,有若干条网络线路,连接各个 州内部的城市. 由于 A 国的州与州之间的关系不是太好,每个州都只有首府建立了到别的州的网络.具 ...
- [2016北京集训试题6]魔法游戏-[博弈论-sg函数]
Description Solution 首先,每个节点上的权值可以等价于该节点上有(它的权的二进制位数+1)个石子,每次可以拿若干个石子但不能不拿. 然后就发现这和NIM游戏很像,就计算sg函数em ...
- [2016北京集训试题8]连在一起的幻想乡[dp+无向图计数]
Description Solution 本博客参考yww大佬的博客,为了加深理解我就自己再写一遍啦. 以下的“无向图”均无重边无自环. 定义f0[n]为n个点构成的无向图个数,f1[n]为n个点构成 ...
- [2016北京集训试题7]thr-[树形dp+树链剖分+启发式合并]
Description Solution 神仙操作orz. 首先看数据范围,显然不可能是O(n2)的.(即绝对不是枚举那么简单的),我们考虑dp. 定义f(x,k)为以x为根的子树中与x距离为k的节点 ...
- (2016北京集训十)【xsy1528】azelso - 概率期望dp
北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$ ...
- (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT
题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...
随机推荐
- 产品经理都知道MVP,但是它可能不再是产品研发最好的模型了
产品经理都知道MVP,但是它可能不再是产品研发最好的模型了 孟小白Aspire • 2017-09-01 • 汽车交通 要简单.讨喜.完整,不要最小可行性产品.这对创业公司的第一个产品来说很重要. M ...
- Axure中移动端原型设计方法(附IPhoneX和IPhone8最新模板)
Axure中移动端原型设计方法(附IPhoneX和IPhone8最新模板) 2018年4月16日luodonggan Axure中基于设备模板的移动端原型设计方法(附IPhoneX和IPhone8最新 ...
- Windows2003系统取消关机提示的方法
方法有两种:1.编辑组策略 打开“开始”-“运行”,在“打开”一栏中输入“gpedit.msc”命令打开组策略编辑器,依次展开“计算机配置”→“管理模板”→“系统”,双击右侧窗口出现的“显示‘关闭事件 ...
- Java中的消息框
JOptionPane.showMessageDialog(newFrame.getContentPane(),"弹出的是消息提示框!", "系统信息", JO ...
- [翻译] ZFDragableModalTransition
ZFDragableModalTransition Usage - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender ...
- python 使用exchange发送邮件(三)
FYI: https://blog.csdn.net/LeoForBest/article/details/79429955
- Windows:删除图标缓存
适用于桌面快捷方式图标丢失或图标变成白色的情况,批处理代码如下: rem 关闭explorer.exe taskkill /f /im explorer.exe attrib -h -i %userp ...
- jQuery Ajax url使用方式
jQuery Ajax的使用场景: 页面需要通过后台逻辑,但只需要局部刷新以显示新的内容. jQuery Ajax url使用方式1.servlet方式: 需要在struts.xml中写一个actio ...
- .net mvc Html.DropDownListFor 设置默认值无效
错误描述: 控制器部分: //从数据字典中加载下拉框 (使用DropDownListFor,SelectList 中不需要设置选中值,即便设置了选中值,也会优先读取Model中对应的值) ViewBa ...
- Mina使用总结(二)Handler
Handler的基本作用,处理接收到的客户端信息 一个简单的Handler实现如下: package com.bypay.mina.handler; import java.util.Date; im ...