题目链接:点击打开链接

思路:

该题暴力当然可以过,   如果数据量加大,  我们还有一种nlogn的算法:FFT

仔细观察这个复习单词量的累加方式可以发现, 这是一个卷积, 可以用FFT加速算法。

细节参见代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <ctime>
#include <bitset>
#include <cstdlib>
#include <cmath>
#include <set>
#include <list>
#include <deque>
#include <map>
#include <queue>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
typedef long double ld;
const double eps = 1e-6;
const double PI = acos(-1);
const int mod = 1000000000 + 7;
const int INF = 0x3f3f3f3f;
// & 0x7FFFFFFF
const int seed = 131;
const ll INF64 = ll(1e18);
const int maxn = 4000 + 10;
int T,n,m,b[maxn], a[maxn];
struct Complex {double x, y; // 实部和虚部 x + yiComplex(double _x = 0.0, double _y = 0.0) {x = _x;y = _y;}Complex operator +(const Complex &b) const {return Complex(x + b.x, y + b.y);}Complex operator -(const Complex &b) const {return Complex(x - b.x, y - b.y);}Complex operator *(const Complex &b) const {return Complex(x*b.x-y*b.y, x*b.y+y*b.x);}
};
void change(Complex y[], int len) {int i, j, k;for(i = 1, j = len/2; i < len-1; i++) {if(i < j) swap(y[i], y[j]);k = len/2;while(j >= k) { j -= k; k /= 2; }if(j < k) j += k;}
}
void fft(Complex y[], int len, int on) {change(y, len);for(int h = 2; h <= len; h <<= 1) {Complex wn(cos(-on*2*PI/h), sin(-on*2*PI/h));for(int j = 0; j < len; j += h) {Complex w(1, 0);for(int k = j; k < j + h/2; k++) {Complex u = y[k];Complex t = w*y[k+h/2];y[k] = u + t;y[k+h/2] = u - t;w = w * wn;}}}if(on == -1) {for(int i = 0; i < len; i++) y[i].x /= len;}
}
Complex x1[maxn], x2[maxn], ans[maxn];
int main() {scanf("%d",&T);while(T--) {scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%d", &a[i]);scanf("%d", &m);int len1 = n, len2 = 0, len = 1;for(int i = 0; i < m; i++) scanf("%d", &b[i]), len2 = max(len2, b[i]);while(len < len1 * 2 || len < len2 * 2) len <<= 1;for(int i = 0; i < len2; i++) x2[i] = Complex(0, 0);for(int i = 0; i < n; i++) x1[i] = Complex(a[i], 0);for(int i = 0; i < m; i++) x2[b[i]-1] = Complex(1, 0);for(int i = len1; i < len; i++) x1[i] = Complex(0, 0);for(int i = len2; i < len; i++) x2[i] = Complex(0, 0);fft(x1, len, 1);fft(x2, len, 1);for(int i = 0; i < len; i++) ans[i] = x1[i] * x2[i];fft(ans, len, -1);for(int i = 0; i < n; i++) ans[i].x += a[i];len = len1 + len2 - 1;int q; scanf("%d", &q);while(q--) {int id;scanf("%d", &id);if(id > len) printf("0\n");else printf("%d\n", (int)round(ans[id-1].x));}}return 0;
}

BNUOJ 27935 我爱背单词(FFT)相关推荐

  1. BNUOJ 27935 我爱背单词 (加强版) (FFT)

    题目链接: BNUOJ 27935 - 我爱背单词 (中文题面) 分析: 原题数据范围很小,可以直接暴力计算新单词对每一天需要背的单词量的贡献, 注意到这个过程实质是一个多项式乘法,第Q天所需要背的单 ...

  2. 《我爱背单词》 Alpha版 发布说明

    --发布地址(baidu网盘) http://pan.baidu.com/s/15omtB --简介  <我爱背单词>是一款英语单词记忆和管理辅助软件,旨在帮助广大考生在短期内攻克GRE. ...

  3. BNU27935——我爱背单词——————【数组模拟】

    我爱背单词 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name:  ...

  4. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的"我爱背单词"beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天 ...

  5. 谈谈英语学习(3):我爱背单词

    万事开头难. 英语的学习,可以概括为听说读写 ,词汇量是基本功.许久没学英语,我决定先花一个月的时间来背单词.翻出当年考研时买的书,就它吧. 背单词有什么技巧?本文只说三个字"好好背&quo ...

  6. 我爱背单词032 perpetual

    perpetual 英[pəˈpetʃuəl] 美[pərˈpetʃuəl] adj.永久的:不断地:无期限的:四季开花的 (1)A perpetual feeling, state, or qual ...

  7. python英语词频_【我爱背单词】从300万单词中给你一份3000英语新闻高频词汇

    -----------------2017-01-22 20:21---------------- [单词集已经更新] [有知友提醒,使用Windows自带的记事本打开会出现单词为分割开来的情况,晚上 ...

  8. 我爱背单词 crucial 030

    crucial 英[ˈkru:ʃl] 美[ˈkruʃəl] adj 关键的,至关重要的:决定性的 If you describe something as crucial, you mean it i ...

  9. 我爱背单词 - 0301

    aspect [ˈæspɛkt] n.样子,外表 a serious aspect 很严肃的样子 n.(问题等)方面 We should study every aspect of this proj ...

最新文章

  1. Django-Ajax
  2. BC30138: 无法在路径“C:\WINDOWS\TEMP\”中创建临时文件: 拒绝访问。
  3. 十一、Linux时间
  4. [ 转载 ] [经典排序算法][集锦]
  5. antd vue表单上传文件_vue+axios+antD的上传图片踩坑
  6. JAVA之编译期和运行期区别
  7. python里删除range里的数字_python中range函数与列表中删除元素
  8. OJ1059: 最高分(C语言)
  9. Java判断一个实体类对象实例的所有成员变量是否为空
  10. linux嵌入式6818,嵌入式ARM实验箱(FS_6818M4)_华清远见研发中心
  11. 利用Resource Hacker简单去除WinRar广告
  12. 基于C#木门归方程序 下料机 锯片 CNC 拆单软件 全屋定制设计拆单软件橱柜衣柜拆单设计制造管理一体化软件 有屋软件
  13. ucore lab1 系统软件启动过程 实验报告
  14. java触屏改_一个JAVA游戏改键改触屏的教程!
  15. HTML和css页眉制作,静态网页制作(Dreamweaver) 设计和制作网站首页 0203-静态网页制作(Dreamweaver)-设计制作网站首页页眉、导航栏.doc...
  16. pdf 转 高清图片
  17. oracle 帮助文件,oracle chm帮助文件下载
  18. 微信小程序开发之——用户登录-搭建开发者服务器(2)
  19. android led弹幕,LED弹幕手持字幕
  20. 北交大计算机在职非全考研初试心得

热门文章

  1. oracle的ocr是什么意思,Oracle11gR2——RAC中的表決磁盤、OCR與OLR
  2. 年薪100w+的阿里p7专家,顶尖的技术人才,只因做到了这几点
  3. 网络爬虫的Robots协议
  4. 清华大学 计算机科学 杨峰,计算机的“诗与远方”
  5. 淘宝,速卖通,天猫同理,商品视频下载过程分享,2019/10/21更新
  6. 每周3课:简单的串口交互应用、板间的串口交互、串口通信与ASCII码 | Mixly纯干货课程...
  7. alfresco 介绍 docker安装
  8. 微信公众号实现机器人回复
  9. 计算机硬件安装实验报告,计算机硬件的组装实验报告.doc
  10. 如何解决redis的并发竞争key问题?附面试答案