题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4827

式子就是 \sum_{i=0}^{n-1}(a[ i ] - b[ i+k ] + c)^2 。把 b 翻成两倍后卷积即可。关于 c 的部分是一个二次函数,注意 c 只能是整数!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define db double
using namespace std;
const int N=5e4+5,M=N*6;
const db pi=acos(-1);
int n,m,sm,len,ca,cb,r[M];
struct cpl{db x,y;}a[M],b[M],I;
cpl operator+ (cpl a,cpl b){return (cpl){a.x+b.x,a.y+b.y};}
cpl operator- (cpl a,cpl b){return (cpl){a.x-b.x,a.y-b.y};}
cpl operator* (cpl a,cpl b){return (cpl){a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x};}
int rdn()
{int ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9') ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar();return fx?ret:-ret;
}
void fft(cpl *a,bool fx)
{for(int i=0;i<len;i++)if(i<r[i])swap(a[i],a[r[i]]);for(int R=2;R<=len;R<<=1){int m=R>>1;cpl Wn=(cpl){ cos(pi/m),fx?-sin(pi/m):sin(pi/m) };for(int i=0;i<len;i+=R){cpl w=I;for(int j=0;j<m;j++,w=w*Wn){cpl tmp=w*a[i+m+j];a[i+m+j]=a[i+j]-tmp;a[i+j]=a[i+j]+tmp;}}}
}
int main()
{n=rdn();m=rdn(); I.x=1;for(int i=n-1;i>=0;i--){a[i].x=rdn();sm+=a[i].x*a[i].x;ca+=a[i].x;}for(int i=0;i<n;i++){b[i].x=b[i+n].x=rdn();sm+=b[i].x*b[i].x;cb+=b[i].x;}int c=floor((db)(cb-ca)/n),tmp=n*c*c+2*(ca-cb)*c;c++; tmp=min(tmp,n*c*c+2*(ca-cb)*c);sm+=tmp;len=1;for(;len<=n*3;len<<=1);for(int i=0;i<len;i++)r[i]=(r[i>>1]>>1)+((i&1)?len>>1:0);fft(a,0); fft(b,0);for(int i=0;i<len;i++)a[i]=a[i]*b[i];fft(a,1); tmp=0;for(int i=(n<<1)-1;i>=n-1;i--)tmp=max(tmp,int(a[i].x/len+0.5));sm-=tmp<<1;printf("%d\n",sm);return 0;
}

转载于:https://www.cnblogs.com/Narh/p/10024331.html

bzoj 4827 [Hnoi2017]礼物——FFT相关推荐

  1. BZOJ 4827 [Hnoi2017]礼物 ——FFT

    题目上要求一个循环卷积的最小值,直接破环成链然后FFT就可以了. 然后考虑计算的式子,可以分成两个部分分开计算. 前半部分FFT,后半部分扫一遍. #include <map> #incl ...

  2. [BZOJ 4827][Hnoi2017]礼物

    4827: [Hnoi2017]礼物 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 1091  Solved: 748 [Submit][Statu ...

  3. [4827][Hnoi2017]礼物——FFT

    题目大意: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一 ...

  4. 【刷题】BZOJ 4827 [Hnoi2017]礼物

    Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在 ...

  5. P3723 [AH2017/HNOI2017]礼物 FFT + 式子化简

    传送门 文章目录 题意: 思路: 题意: 思路: 首先可以知道,我们对某个数组加上一个正数数的操作可以转换成对一个数组加上一个任意数,所以我们设变化量为xxx. 对于∑i=1n(ai−bi)2\sum ...

  6. bzoj4827: [Hnoi2017]礼物 FFT

    bzoj4827: [Hnoi2017]礼物 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n ...

  7. [AH2017/HNOI2017]礼物(FFT)

    题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一 ...

  8. 4827: [Hnoi2017]礼物

    首先知道旋转的一般套路就是开两倍. 然后此时发现可以把 ∑ni=1(ai−bi)2∑i=1n(ai−bi)2\sum_{i=1}^{n}(a_i-b_i)^2化作∑ni=1a2i+∑ni=1b2i−2 ...

  9. bzoj4827[Hnoi2017]礼物 (FFT,生成函数)

    Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是 ...

最新文章

  1. 的主机名_Mac教程——修改mac 下主机名、电脑名、局域网主机名
  2. mysql默认几个库_MySQL 安装初始化mysql后,默认几个库介绍
  3. Oracle生成指定表的列名,并前后添加select from
  4. Qt多线程中的信号与槽
  5. 决策树-基于不同算法的决策树模型对比
  6. dijkstra算法_Python实现图的经典DFS、BFS、Dijkstra、Floyd、Prim、Kruskal算法
  7. 【经验】Qt项目开发必备工具
  8. java开发_Runtime
  9. 【图像配准】基于matlab GUI Powell+蚁群算法图像配准【含Matlab源码 928期】
  10. shiro 框架实现 LDAP 登录
  11. 一篇文章学会er图绘制
  12. Excel IF+COUNTIF、IFERROR+VLOOKUP使用组合公式
  13. 挚文集团2021年Q3净营收37.592亿元 环比增长2.4%
  14. pd对焦速度_PDAF对焦技术原理解析及生产应用
  15. String转成JSON或String转为list后转为JSON或String转为map后转为JSON
  16. WiFi认证—分析从连接WiFi到上网的全过程(一)
  17. 计算机组装与维护论文 致谢,计算机组装与维护论文
  18. VS中fseek.cpp引发断点——将一个无效参数传递给了将无效参数视为严重错误的函数
  19. 一个C语言算法--税收计算
  20. 单片机数字钟(调时,调时闪烁,万年历,年月日)超详细解析

热门文章

  1. UIView类绘图出现错误提示
  2. php安装编译时 configure: error: Cannot find OpenSSL's evp.h
  3. ruby 数据sql操作
  4. 【CentOS 7笔记11】,目录权限,所有者与所有组,隐藏权限#171022
  5. Spring Boot -Shiro配置多Realm 1
  6. 消息中间件Client模块划分
  7. [Intel Edison开发板] 02、Edison开发板入门
  8. centos 7上ambari安装试用
  9. IDEA创建文件添加作者及时间信息
  10. 很多人问为什么使用联合索引,为什么不建两个单独的索引呢?