【HNOI2017】礼物
题面
题解
显然两个手环只需要一个的亮度增加\(c \in [-m, m]\)和原题是等价的。
于是可以写成这样一个公式:
\]
于是最后只有\(-2\sum_{i=1}^n x_iy_{i+k}\)不是常数项(假设\(c\)是常数)
于是现在问题变成了求\(\sum_{i=1}^nx_iy_{i+k}\)的最大值。
这个时候就需要用到一些套路。
我们将序列\(y\)反过来然后在后面接一遍,变成多项式卷积。
然后我们可以看出\(\sum x_iy_{i+k}\)就是\(x^{n+k-1}\)的系数,
然后\(\because m \leq 100\),暴力枚举\(c\)即可。
代码
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define RG register
#define clear(x, y) memset(x, y, sizeof(x));
using namespace std;
inline int read()
{
int data=0, w=1;
char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') w=-1, ch=getchar();
while(ch>='0'&&ch<='9') data=(data<<3)+(data<<1)+(ch^48), ch=getchar();
return data*w;
}
const int maxn(2000010);
const double pi(acos(-1));
int d[maxn];
int s[maxn], ans=2147483647, cnt;
int n, m, r[maxn], N, M, c[maxn];
complex<double> a[maxn], b[maxn];
template<int opt>
inline void FFT(complex<double> *p)
{
for(RG int i=0;i<N;i++) if(i<r[i]) swap(p[i], p[r[i]]);
for(RG int i=1;i<=N;i<<=1)
{
RG complex<double> rot(cos(pi/i), opt*sin(pi/i));
for(RG int j=0;j<N;j+=(i<<1))
{
RG complex<double> w(1, 0);
for(RG int k=0;k<i;k++, w*=rot)
{
complex<double> x=p[j+k], y=w*p[j+k+i];
p[j+k]=x+y; p[j+k+i]=x-y;
}
}
}
}
inline void init()
{
M=n+(N=n-1);
for(RG int i=1;i<=n;i++) a[i-1]=d[i];
for(RG int i=0;i<n;i++) b[i]=b[i+n]=c[n-i];
M+=N; for(N=1;N<=M;N<<=1) ++cnt;
for(RG int i=0;i<N;i++) r[i]=(r[i>>1]>>1)|((i&1)<<(cnt-1));
FFT<1>(a); FFT<1>(b); for(RG int i=0;i<N;i++) a[i]*=b[i];
FFT<-1>(a);
for(RG int i=0;i<=M;i++) s[i]=(int)(a[i].real()/N+0.5);
}
int main()
{
n=read(); m=read();
for(RG int i=1;i<=n;i++) d[i]=read();
for(RG int i=1;i<=n;i++) c[i]=read();
init();
int o=0, p=0, q=0, r=0, maxs=-ans;
for(RG int i=1;i<=n;i++) o+=d[i]*d[i], p+=c[i]*c[i], q+=d[i], r+=c[i];
for(RG int i=n-1;i<(n<<1);i++) maxs=max(maxs, s[i]);
for(RG int C=-m;C<=m;C++)
{
int res=o+p+C*C*n+2*C*(q-r)-(maxs << 1);
ans=min(res, ans);
}
printf("%d\n", ans);
return 0;
}
【HNOI2017】礼物的更多相关文章
- bzoj 4827: [Hnoi2017]礼物 [fft]
4827: [Hnoi2017]礼物 题意:略 以前做的了 化一化式子就是一个卷积和一些常数项 我记着确定调整值还要求一下导... #include <iostream> #include ...
- P3723 [AH2017/HNOI2017]礼物
题目链接:[AH2017/HNOI2017]礼物 题意: 两个环x, y 长度都为n k可取 0 ~ n - 1 c可取任意值 求 ∑ ( x[i] - y[(i + k) % n + 1] ...
- 【BZOJ4827】 [Hnoi2017]礼物
BZOJ4827 [Hnoi2017]礼物 Solution 如果一串数的增加,不就等于另一串数减吗? 那么我们可以把答案写成另一个形式: \(ans=\sum_{i=1}^n(x_i-y_i+C)^ ...
- 4827: [Hnoi2017]礼物
4827: [Hnoi2017]礼物 链接 分析: 求最小的$\sum_{i=1}^{n}(x_i-y_i)^2$ 设旋转了j位,每一位加上了c. $\sum\limits_{i=1}^{n}(x_{ ...
- 【LG3723】[AHOI2017/HNOI2017]礼物
[LG3723][AHOI2017/HNOI2017]礼物 题面 洛谷 题解 首先我们将\(c\)看作一个可以为负的整数,那么我们就可以省去讨论在哪个手环加\(c\)的繁琐步骤了 设我们当前已经选好了 ...
- 洛谷 P3723 [AH2017/HNOI2017]礼物 解题报告
P3723 [AH2017/HNOI2017]礼物 题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 \(n\) 个 ...
- [BZOJ4827][Hnoi2017]礼物(FFT)
4827: [Hnoi2017]礼物 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1315 Solved: 915[Submit][Status] ...
- [Luogu P3723] [AH2017/HNOI2017]礼物 (FFT 卷积)
题面 传送门:洛咕 Solution 调得我头大,我好菜啊 好吧,我们来颓柿子吧: 我们可以只旋转其中一个手环.对于亮度的问题,因为可以在两个串上增加亮度,我们也可以看做是可以为负数的. 所以说,我们 ...
- 笔记-[AH2017/HNOI2017]礼物
笔记-[AH2017/HNOI2017]礼物 [AH2017/HNOI2017]礼物 \[\begin{split} ans_i=&\sum_{j=1}^n(a_j-b_j+i)^2\\ =& ...
- [bzoj4827][Hnoi2017]礼物_FFT
礼物 bzoj-4827 Hnoi-2017 题目大意:给定两个长度为$n$的手环,第一个手环上的$n$个权值为$x_i$,第二个为$y_i$.现在我可以同时将所有的$x_i$同时加上自然数$c$.我 ...
随机推荐
- BaseDAL最牛数据层基类2
using System; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; using Syste ...
- asp.net调用微信扫一扫功能
1.页面引用http://res.wx.qq.com/open/js/jweixin-1.0.0.js 2.前台代码 function shaomiao() { wx.config({ debug: ...
- 70部MAYA灯光材质渲染教程合集
MAYA灯光材质渲染教程合集 教程格式:MP4和flv 两种格式 使用版本:教程不是一年出的教程,各个版本都有 (教程软件为英文版) 清晰度:可以看清软件上的文字 语言:部分中文字幕,其他英文(通过看 ...
- LeetCoder题解之Find All Anagrams in a String
1.题目描述 2.题目分析 直接使用 哈希表记录子串的信息,然后对比两个哈希表信息即可 3.代码 vector<int> findAnagrams(string s, string p) ...
- Linux基础知识与基础命令
Linux基础知识与基础命令 系统目录 Linux只有一个根目录,没有盘符的概念,文件目录是一个倒立的树形结构. 常用的目录功能 bin 与程序相关的文件 boot 与系统启动相关 cdrom 与Li ...
- 分享今天在客户那里遇到的SQLSERVER连接超时以及我的解决办法
分享今天在客户那里遇到的SQLSERVER连接超时以及我的解决办法 客户的环境:SQLSERVER2005,WINDOWS2003 SP2 32位 这次发生连接超时的时间是2013-8-5 21: ...
- python常用模块之-random模块
random模块顾名思义就是生成随机数的模块. random模块有以下常见方法: 1,打印0-1之间的任意随机浮点数,不能指定区间. print(random.random()) 2,打印随机符点数, ...
- kafka入门1:安装及配置
1下载 官方下载地址:https://kafka.apache.org/downloads 案例使用版本:kafka_2.11-1.1.0.tgz 2上传服务器 使用ftp工具将压缩包放置到服务器上 ...
- 下载 VM 模板
使用门户或 PowerShell 在 Azure 中创建 VM 时,系统会自动创建一个 Resource Manager 模板. 可以使用此模板快速复制部署. 该模板包含有关资源组中所有资源的信息. ...
- Oracle EBS OPM 取消生产批
--取消生产批 --created by jenrry SET serveroutput on; DECLARE p_batch_header_rec gme_batch_header%ROWTYPE ...