FFT+数学

先开始觉得枚举c就行了,不过我naive了

事实上c是确定的,通过化简式子可以得出一个二次函数,那么c就可以解出来了。

然后把a翻转,fft一下就行了

难得的良心题

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N = 2e5 + ;
  4. const double pi = acos(-);
  5. int n, len, ans, suma, sumb, mx = -1e9, m;
  6. struct data {
  7. double x, y;
  8. data() {}
  9. data(double _x, double _y) : x(_x), y(_y) {}
  10. data friend operator - (const data &a, const data &b) {
  11. return data(a.x - b.x, a.y - b.y);
  12. }
  13. data friend operator + (const data &a, const data &b) {
  14. return data(a.x + b.x, a.y + b.y);
  15. }
  16. data friend operator * (const data &a, const data &b) {
  17. return data(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
  18. }
  19. } a[N], b[N];
  20. void fft(data *a, int len, int f) {
  21. int n = << len;
  22. for(int i = ; i < n; ++i) {
  23. int t = ;
  24. for(int j = ; j < len; ++j) {
  25. if(i & ( << j)) {
  26. t |= << (len - j - );
  27. }
  28. }
  29. if(i < t) {
  30. swap(a[i], a[t]);
  31. }
  32. }
  33. for(int l = ; l <= n; l <<= ) {
  34. int m = l >> ;
  35. data w = data(cos(pi / m), f * sin(pi / m));
  36. for(int i = ; i < n; i += l) {
  37. data t = data(, );
  38. for(int k = ; k < m; ++k, t = t * w) {
  39. data x = a[k + i], y = t * a[i + k + m];
  40. a[k + i] = x + y;
  41. a[i + m + k] = x - y;
  42. }
  43. }
  44. }
  45. }
  46. int main() {
  47. scanf("%d%d", &n, &m);
  48. for(int i = ; i <= n; ++i) {
  49. scanf("%lf", &a[i].x);
  50. suma += a[i].x;
  51. }
  52. for(int i = ; i <= n; ++i) {
  53. scanf("%lf", &b[i].x);
  54. b[i + n].x = b[i].x;
  55. sumb += b[i].x;
  56. }
  57. int c = floor((double)(sumb - suma) / n + 0.5);
  58. for(int i = ; i <= n; ++i) {
  59. a[i].x += c;
  60. ans += a[i].x * a[i].x + b[i].x * b[i].x;
  61. }
  62. reverse(b + , b + * n + );
  63. for(; << len <= * n; ++len);
  64. fft(a, len, );
  65. fft(b, len, );
  66. for(int i = ; i < << len; ++i) {
  67. a[i] = a[i] * b[i];
  68. }
  69. fft(a, len, -);
  70. for(int i = n + ; i <= * n + ; ++i) {
  71. a[i].x /= ( << len);
  72. mx = max(mx, (int)(a[i].x + 0.1));
  73. }
  74. printf("%d\n", ans - * mx);
  75. return ;
  76. }

bzoj4827的更多相关文章

  1. 【BZOJ4827】【HNOI2017】礼物(FFT)

    [BZOJ4827][HNOI2017]礼物(FFT) 题面 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每 ...

  2. BZOJ4827 [Hnoi2017]礼物 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8823962.html 题目传送门 - BZOJ4827 题意 有两个长为$n$的序列$x$和$y$,序列$x,y ...

  3. 【BZOJ4827】 [Hnoi2017]礼物

    BZOJ4827 [Hnoi2017]礼物 Solution 如果一串数的增加,不就等于另一串数减吗? 那么我们可以把答案写成另一个形式: \(ans=\sum_{i=1}^n(x_i-y_i+C)^ ...

  4. [bzoj4827][Hnoi2017]礼物_FFT

    礼物 bzoj-4827 Hnoi-2017 题目大意:给定两个长度为$n$的手环,第一个手环上的$n$个权值为$x_i$,第二个为$y_i$.现在我可以同时将所有的$x_i$同时加上自然数$c$.我 ...

  5. 【ZJOI2017 Round2练习&BZOJ4827】D1T3 gift(FFT)

    题意: 思路:可以看出题目所要最小化的是这样一个形式: 拆出每一项之后发现会变化的项只有sigma a[i]*b[i+t]与c^2,c*(a[i]-b[i]) c可以在外层枚举,剩下的只有sigma ...

  6. [BZOJ4827][Hnoi2017]礼物(FFT)

    4827: [Hnoi2017]礼物 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1315  Solved: 915[Submit][Status] ...

  7. bzoj4827 [Hnoi2017]礼物

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

  8. bzoj千题计划303:bzoj4827: [Hnoi2017]礼物

    https://www.lydsy.com/JudgeOnline/problem.php?id=4827 式子化简一下,发现最后只跟 Σ xi*yi 有关 第二个序列反转,就可以用FFT优化 注意: ...

  9. 【BZOJ4827】【HNOI2017】礼物

    强省HN弱省HA……(读作强省湖南弱省蛤 原题: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个 ...

  10. 2018.11.16 bzoj4827: [Hnoi2017]礼物(ntt)

    传送门 nttnttntt 入门题. 考虑展开要求的式子∑i=0n−1(xi−yi−c)2\sum_{i=0}^{n-1}(x_i-y_i-c)^2∑i=0n−1​(xi​−yi​−c)2 => ...

随机推荐

  1. DataSource是什么

    public interface DataSource 该工厂用于提供到此 DataSource 对象表示的物理数据源的连接.作为 DriverManager(二者区别:http://tobylxy. ...

  2. 如何与强势的人相处zz

    要和强势的人相处良好,须知道强势的人有两个很显著的特点:一.以自我观点为中心.二.怕别人否定自己.强势的主要作用也有两个:一.支配别人.二.掩盖自卑. 首先,要区分一下强势的人和特立独行的人,这两类人 ...

  3. Linux问题,磁盘分区打不开了

    Metadata kept in Windows cache, refused to mount. chkdsk /f http://www.bubuko.com/infodetail-1184937 ...

  4. eclipse 导入web项目时常见错误

    1. JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java B ...

  5. 【BZOJ3052】[wc2013]糖果公园 带修改的树上莫队

    [BZOJ3052][wc2013]糖果公园 Description Input Output Sample Input Sample Input Sample Output 84 131 27 84 ...

  6. flume采集微信小程序数据

    flume采集微信小程序数据 flume收集前端埋点数据[1]POST请求http://f.x.com:50000数据格式: JsonArray数据格式示例:[{ "headers" ...

  7. struts2的核心和工作原理 (转)

    转自--------http://blog.csdn.net/laner0515/article/details/27692673 在学习struts2之前,首先我们要明白使用struts2的目的是什 ...

  8. 阿里妈妈-RAP项目的实践(1)

    在同事的推荐下,去了解了一下http://thx.github.io/RAP/study.html#,它是发现在前后端分离开发的神器 下面我们来简单上一组代码,来简单了解一下rap <!DOCT ...

  9. [通信]Linux User层和Kernel层常用的通信方式

    转自:https://bbs.csdn.net/topics/390991551?page=1 netlink:https://blog.csdn.net/stone8761/article/deta ...

  10. Windows窗口程序从创建到关闭产生的消息

    Windows是消息驱动的,理解消息机制及消息循环是特别重要.知道在什么情况下产生什么消息会让我们对程序有更好的控制.Windows给应用程序发消息,有些会加入应用程序的消息队列,也是就是队列消息.有 ...