博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[AH2017/HNOI2017]礼物
阅读量:7089 次
发布时间:2019-06-28

本文共 1083 字,大约阅读时间需要 3 分钟。

m很小100,一个O(nm)的复杂度

两个手环增加非负整数亮度,等于其中一个增加一个整数亮度(可以为负)

显而易见,最多增加[-m,m]个亮度

考虑O(n)枚举对齐方式,O(m)枚举差距的亮度

亮度增加的时候,维护平方和,只用维护之前的平方和,所有项的和即可

但是每次旋转,初始的对齐位置会发生改变,所以暴力可以O(N^2)

我们只关心初始的平方和

拆开,其实就要求∑ai*bj

由于旋转,所以b倍长,

对应下标差一定,求乘积

把a数组reverse,然后NTT快乐搞定

 

开始没有注意两个环都可以增亮,,所以只枚举了[0,m],没想到有95pts、。。。

代码:

#include
#define reg register int#define il inline#define numb (ch^'0')#define int long longusing namespace std;typedef long long ll;il void rd(int &x){ char ch;x=0;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}namespace Miracle{const int N=100000+5;const int mod=998244353;const int G=3;const int GI=332748118;const int inf=0x3f3f3f3f;int n,m;ll qm(ll x,ll y){ ll ret=1; while(y){ if(y&1) ret=ret*x%mod; x=x*x%mod; y>>=1; } return ret;}int rev[8*N];ll a[8*N],b[8*N];void NTT(ll *f,int n,int c){ for(reg i=0;i
>1]>>1)|((i&1)?(len>>1):0); }// for(reg i=0;i
View Code

 

转载于:https://www.cnblogs.com/Miracevin/p/10251385.html

你可能感兴趣的文章
将Access换成sql要改些什么?注意哪些问题?(汇总)
查看>>
SQL中的union和union all区别(转)
查看>>
[转载]Dotnet程序集自动生成版本号
查看>>
电脑通过vnc控制android 手机
查看>>
Xml匹配为对象集合(两种不同的方式)
查看>>
用javascript实现网站来回撞动的广告图片
查看>>
boost bimap 学习笔记
查看>>
子串计算 --2010北京大学复试机试题
查看>>
学习之路十五:C#基础知识简单梳理
查看>>
最近很忙
查看>>
Html中table显示空单元格的方法及table标签属性总结
查看>>
WPF 获取文件运行目录
查看>>
使用emma对web工程进行测试覆盖率检查
查看>>
android activity生命周期
查看>>
距离和相似度度量[转]
查看>>
ADO.net DataTable 和Amazon SimpleDB的相互转换
查看>>
[JS2] JS是弱类型
查看>>
企业搜索引擎开发之连接器connector(二十四)
查看>>
数学图形(1.9)悬链线
查看>>
有上下界的网络流问题
查看>>