[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写的很复杂 ...
随机推荐
- 百度开源的分布式 id 生成器
UidGenerator是Java实现的, 基于Snowflake算法的唯一ID生成器.UidGenerator以组件形式工作在应用项目中, 支持自定义workerId位数和初始化策略, 从而适用于d ...
- 转:C# WinForm窗体及其控件的自适应
一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率> ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...
- GIT学习---GIT&github的使用
GIT&github入门 版本控制的原理: 根据md5进行文件的校验[MD5的特性就是每次的输入一致则输出也一致],对于每次的修改进行一次快照 版本控制的2个功能: 版本管理 + 协作开 ...
- 【原创】Qt 使用ODBC driver 连接SQL Server
最近在做数据库的课程设计.第一个需要解决的问题是使用什么工具来实现这个系统.经过一番资料查找,决定使用SQL Server Express 2012作为服务器,使用Qt作为编写客户端程序语言.问题是c ...
- [EffectiveC++]item46:需要类型转换时请为模板定义非成员函数
- Alpha 冲刺报告(6/10)
Alpha 冲刺报告(6/10) 队名:洛基小队 峻雄(组长) 已完成:实现角色的移动. 明日计划:关于角色的属性设计. 剩余任务:角色的属性脚本 困难:角色的属性以及具体的编码 ---------- ...
- 【Alpha】Daily Scrum Meeting
一 博客集合贴 11月15日 [Alpha]Daily Scrum Meeting——blog1 11月18日 [Alpha]Daily Scrum Meeting——blog2 11月19日 [Al ...
- UE4中动画蒙太奇的合成
在游戏中的技能施法动作是可以通过软件合成的,笔者在这里介绍一种用UE4合成多个动画的操作. 在UE4中角色的动作可以由多种方式达成,一种是混合空间,例如角色的跑动和跳跃,其中的动作是由状态机控制的,原 ...
- [USACO19FEB]Moorio Kart
题目 我们的神仙教练在考试里放了这道题,当时我非常惊讶啊 背包是\(O(n^3)\)的吧明明是带根号的好吧,那既然要优化的话 NTT!什么时候我们教练会在考试里放多项式了 模数\(1e9+7\)? 任 ...
- 1898: [Zjoi2005]Swamp 沼泽鳄鱼
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1582 Solved: 870 [Submit][S ...