loj#2020 「AHOI / HNOI2017」礼物

链接

bzoj没\(letex\),差评

loj

luogu

思路

最小化\(\sum\limits_1^n(a_i-b_i)^2\)

设改变量为k

\(\sum\limits_1^n(a_i-(b_i+k))^2\)

\(\sum\limits_1^n(a_i^2-2*a_i*(b_i+k)+(b_i+k)^2)\)

\(\sum\limits_1^n(a_i^2-2*a_i*b_i-2*a_i*k+b_i^2+2*b_i*k+k^2)\)

\(\sum\limits_1^n(a_i^2+b_i^2)+k\sum\limits_1^{n}(2b_i-2a_i+k^2)-\sum\limits_1^n 2*a_i*b_i\)

枚举k求前面最大,ntt求后面最大

代码

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N=4e5+7,mod=998244353;
  4. int read() {
  5. int x=0,f=1;char s=getchar();
  6. for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
  7. for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
  8. return x*f;
  9. }
  10. int n,m,k,limit=1,l,a[N],b[N],r[N];
  11. int q_pow(int a,int b) {
  12. int ans=1;
  13. while(b) {
  14. if(b&1) ans=1LL*ans*a%mod;
  15. a=1LL*a*a%mod;
  16. b>>=1;
  17. }
  18. return ans;
  19. }
  20. void ntt(int *a,int type) {
  21. for(int i=0;i<limit;++i)
  22. if(i<r[i]) swap(a[i],a[r[i]]);
  23. for(int mid=1;mid<limit;mid<<=1) {
  24. int Wn=q_pow(3,(mod-1)/(mid<<1));
  25. for(int i=0;i<limit;i+=(mid<<1)) {
  26. for(int j=0,w=1;j<mid;++j,w=1LL*w*Wn%mod) {
  27. int x=a[i+j],y=1LL*w*a[i+j+mid]%mod;
  28. a[i+j]=(x+y)%mod;
  29. a[i+j+mid]=(x+mod-y)%mod;
  30. }
  31. }
  32. }
  33. if(type==-1) {
  34. reverse(&a[1],&a[limit]);
  35. int inv=q_pow(limit,mod-2);
  36. for(int i=0;i<=limit;++i) a[i]=1LL*a[i]*inv%mod;
  37. }
  38. }
  39. int main() {
  40. n=read(),k=read();
  41. m=n<<1;
  42. n--,m--;
  43. int sum_a=0,sum_b=0,sum=0;
  44. for(int i=0;i<=n;++i) a[i]=read(),sum_a+=a[i],sum+=a[i]*a[i];
  45. for(int i=n;i>=0;--i) b[i+n+1]=b[i]=read(),sum_b+=b[i],sum+=b[i]*b[i];
  46. while(limit<=n+m) limit<<=1,l++;
  47. for(int i=0;i<=limit;++i)
  48. r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
  49. ntt(a,1),ntt(b,1);
  50. for(int i=0;i<=limit;++i) a[i]=1LL*a[i]*b[i]%mod;
  51. ntt(a,-1);
  52. int ma=0;
  53. for(int i=n;i<=n+n;++i) ma=max(ma,a[i]);
  54. int ans=0x7fffffff;
  55. for(int k=-100;k<=100;++k) {
  56. int tmp=sum+k*(2*sum_b-2*sum_a+(n+1)*k)-2*ma;
  57. ans=min(ans,tmp);
  58. }
  59. cout<<ans<<"\n";
  60. return 0;
  61. }

loj#2020 「AHOI / HNOI2017」礼物 ntt的更多相关文章

  1. loj#2020. 「AHOI / HNOI2017」礼物

    题意:给定xy数组求 \(\sum_{i=0}^{n-1}(x_i+y_{(i+k)\modn}+c)^2\) 题解:先化简可得 \(n*c^2+2*\sum_{i=0}^{n-1}x_i-y_i+\ ...

  2. [LOJ 2022]「AHOI / HNOI2017」队长快跑

    [LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因 ...

  3. 「AHOI / HNOI2017」礼物

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

  4. loj #2023. 「AHOI / HNOI2017」抛硬币

    #2023. 「AHOI / HNOI2017」抛硬币   题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个 ...

  5. loj #2021. 「AHOI / HNOI2017」大佬

    #2021. 「AHOI / HNOI2017」大佬   题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢 ...

  6. LOJ#2019. 「AHOI / HNOI2017」影魔

    题意: 在一个序列中 如果有一个子区间 它有一个端点是区间最大值 另一个端点不是这个区间的次大值 就会有p2的贡献 它两个端点分别是最大值次大值 就会有p1的贡献 我们发现这两个条件有一个重合的部分 ...

  7. Loj #2495. 「AHOI / HNOI2018」转盘

    Loj #2495. 「AHOI / HNOI2018」转盘 题目描述 一次小 G 和小 H 原本准备去聚餐,但由于太麻烦了于是题面简化如下: 一个转盘上有摆成一圈的 \(n\) 个物品(编号 \(1 ...

  8. Loj #2494. 「AHOI / HNOI2018」寻宝游戏

    Loj #2494. 「AHOI / HNOI2018」寻宝游戏 题目描述 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得 ...

  9. 「AHOI / HNOI2017」单旋

    「AHOI / HNOI2017」单旋 题目链接 H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种 ...

随机推荐

  1. model中的自动验证 $_validate $_auto

    普通模式: <?php class UserModel extends RelationModel{ /**自动验证**/ protected $_validate = array( /**ar ...

  2. Redis单机多节点集群实验

    第一步:安装Redis 前面已经安装过了 不解释, Reids安装包里有个集群工具,要复制到/usr/local/bin里去 cp redis-3.2.9/src/redis-trib.rb /usr ...

  3. 2019/4/22 拓扑排序的高效写法. 模板题HDU1285:确定比赛名次

    传送门 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现 ...

  4. 前端 CSS 介绍

    CSS介绍 我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前,我们想要修改HTML标签的样式需要为每个HTML标签单独定义样 ...

  5. 学号 20175201张驰 《Java程序设计》第6周学习总结

    学号 20175201张驰 <Java程序设计>第6周学习总结 教材学习内容总结 第7章 ·1.Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类称为内部类的外嵌类 ...

  6. MATLAB符号对象与符号运算

    序言 符号对象(Symbolic Objects 不同于普通的数值计算)是Matlab中的一种特殊数据类型,它可以用来表示符号变量.表达式以及矩阵,利用符号对象能够在不考虑符号所对应的具体数值的情况下 ...

  7. AIX 7.1 RAC 11.2.0.4.0升级至11.2.0.4.6(一个patch跑了3个小时)

    1.环境 DB:两节点RAC 11.2.0.4.0升级至11.2.0.4.6 OS:AIX 7.1(205G内存 16C) 2.节点1.节点2(未建库) 2.1.patch 20420937居然用了3 ...

  8. [转载来之雨松:NGUI研究院之为什么打开界面太慢(十三)]

    本文固定链接: http://www.xuanyusong.com/archives/2799

  9. 04-python3.5-模拟三级菜单-省-县-区域--01

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:XZ data = { '北京':{ "昌平":{ "沙河&qu ...

  10. AndroidStudio 快捷键(最实用的20个)(转)

    有时候用的编辑器多了,快捷键容易记混淆,所以我门只用记最实用的快捷键就行了,其他效率不高的到要用的时候再查也不迟 下面是我使用AndroidStudio以来最常用的也是我认为最有用的20个快捷键 给大 ...