COGS 2581 无聊的会议V2
题目大意
给定一个长为\(n\)的序列,定义\(y\)在三元对\((x,y,z)\)中成为中心轴当且仅当同时满足:\(a_x = a_y = a_z,y-x=z-y,x<y<z\)对于每个位置\(i\)求使\(i\)成为中心轴的三元对的数量.
题解
首先我们发现\((a_i \leq 5)\)所以我们可以分别枚举0~5这6个数字
假设当前枚举到\(num\),那么把等于\(num\)的置为1,其余的置为0
那么现在问题转化成了怎么求出值全为1的三元对
观察下图:假设方框所选作为中心轴
则中心轴的数量+1当且仅当黑线的两端均为1
我们发现若黑线表示两数相乘,那么乘法运算恰好符合上一句
并且我们发现这构成了卷积的形式
所以我们使用FFT加速
由数学知识可以得到,以i为中心轴的三元对个数储存于\(2i\)中
但是因为我们计算时没有保证\(x < z\)所以不要忘了\(ans/=2\)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
x=0;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
const int maxn = 1048576+1+11424;
const int mod = 23068673;
const int pri_rt = 3;
int e[maxn],ie[maxn],len;
inline int qpow(int x,int p){
int ret = 1;
for(;p;x=1LL*x*x%mod,p>>=1) if(p&1) ret=1LL*ret*x%mod;
return ret;
}
inline void init(int n){
len = n;
int bas = qpow(pri_rt,(mod-1)/len);
int inv = qpow(bas,mod - 2);
e[0] = ie[0] = 1;
for(int i=1;i<n;++i){
e[i] = 1LL*e[i-1]*bas%mod;
ie[i] = 1LL*ie[i-1]*inv%mod;
}
}
inline void FNT(int n,int *x,int *w){
for(int i=0,t=0;i<n;++i){
if(i > t) swap(x[i],x[t]);
for(int j=n>>1;(t^=j) < j;j>>=1);
}
for(int m=2;m<=n;m<<=1){
int k = m>>1,t = len/m;
for(int i=0;i<n;i+=m){
for(int j=0,p=0;j<k;++j,p+=t){
int u = 1LL*x[i+j+k]*w[p]%mod;
x[i+j+k] = x[i+j] - u;
if(x[i+j+k] < 0) x[i+j+k] += mod;
x[i+j] += u;
if(x[i+j] >= mod) x[i+j] -= mod;
}
}
}
if(w == ie){
int inv = qpow(n,mod-2);
for(int i=0;i<n;++i) x[i] = 1LL*x[i]*inv%mod;
}
}
int a[maxn],c[maxn],ans[maxn];
int main(){
freopen("OXO.in","r",stdin);
freopen("OXO.out","w",stdout);
int n;read(n);
for(int i=0;i<n;++i) read(a[i]);
int len;for(int i=1;(i>>2)<n;i<<=1) len = i;
init(len);
for(int num=0;num<=5;++num){
memset(c,0,sizeof c);
for(int i=0;i<n;++i) if(a[i] == num) c[i] = 1;
FNT(len,c,e);
for(int i=0;i<len;++i) c[i] = 1LL*c[i]*c[i]%mod;
FNT(len,c,ie);
for(int i=0;i<len;++i){
if( (i&1) || a[i>>1] != num ) continue;
if(c[i] < 0) c[i] += mod;
ans[i>>1] += c[i]>>1;
}
}
for(int i=0;i<n;++i) printf("%d\n",ans[i]);
getchar();getchar();
return 0;
}
COGS 2581 无聊的会议V2的更多相关文章
- (转)我看PhD by 王珢
我看PhD by 王垠 前段时间看了一下这些关于 PhD 的负面信息: 一个专门反对读 PhD 的 BLOG 叫“100 Reasons NOT to Go to Graduate School”(下 ...
- Tank游戏需求分析兼项目计划发布!
项目计划 1. 编写目的 此需求文档旨在明确本游戏项目的详细规则和操作方法,供用户理解项目实现的具体功能,并作为项目详细设计开发的基础. 2. 项目背景 市面上游许多魔性小游戏,让广大玩家根本 ...
- 转载:简化IT程序员工作生活的4个窍门
如果可以简化你的生活——少做枯燥的任务,将时间真正地用于完成事情,你愿不愿意去尝试?下面就让我一起来学一下如何让程序员工作生活变得简单的小窍门.如果你敢于倾听自己的心声,你会发现自己一天中的大多数时间 ...
- 10.18 noip模拟试题
分火腿 (hdogs.pas/.c/.cpp) 时间限制:1s:内存限制 64MB 题目描述: 小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿. ...
- 大V云集!参加首届阿里巴巴在线技术峰会的八大理由
由阿里巴巴集团.阿里巴巴技术协会(ATA)和阿里云云栖社区联合举办的首届阿里巴巴在线技术峰会(Alibaba Online Technology Summit)将于7月19日-21日20:00-21: ...
- 2014-10-24 NOIP欢乐赛
10-24NOIP欢乐赛 ——By 潘智力 题目名称 分火腿 无聊的会议 班服 时间限制 1s 1s 1s 内存限制 64MB 128MB 128MB 输入文件 hdogs.in meeting.in ...
- 5G VS WiFi6,实力大比拼!
移动通信与WiFi,就像移动设备上的两大高手.彼此势均力敌:一个主室内,一个主室外.WiFi是移动网络的室内覆盖补充,也承担着大量的数据流量卸载,二者既想各自占山为王,但也时不时地相互成全对方. 然而 ...
- [书籍分享]0-001.rework(重来:更为简单有效的商业思维)
封面 内容简介 大多数的企业管理的书籍都会告诉你:制定商业计划.分析竞争形势.寻找投资人等等.如果你要找的是那样的书,那么把这本书放回书架吧. 这本书呈现的是一种更好.更简单的经商成功之道.读完 ...
- 如何搭建自己的SPRING INITIALIZR server
这两天在慕课学Spring boot ,用idea通过spring initializr新建项目 即使用代理连不上.无奈. 参考了 GitHub - spring-io/initializr: A w ...
随机推荐
- 敏捷DoD完毕定义的多种形态
作者:张克强 作者微博:张克强-敏捷307 关于Definition of Done 完毕的定义 在以往的说法中,常见用 退出标准 , 完毕条件.成功标准,等等 在敏捷软件开发中,存在多级的不同 ...
- Chrome自带恐龙小游戏的源码研究(三)
在上一篇<Chrome自带恐龙小游戏的源码研究(二)>中实现了云朵的绘制和移动,这一篇主要研究如何让游戏实现昼夜交替. 昼夜交替的效果主要是通过样式来完成,但改变样式的时机则由脚本控制. ...
- 移动应用开发测试工具Bugtags集成和使用教程【转载】
前段时间,有很多APP突然走红,最终却都是樱花一现.作为一个创业团队,突然爆红是非常难得的机会.然并卵,由于没有经过充分的测试,再加上用户的激增,APP闪退.服务器数据异常等问题就被暴露出来,用户的流 ...
- uva 11404 dp
UVA 11404 - Palindromic Subsequence 求给定字符串的最长回文子序列,长度一样的输出字典序最小的. 对于 [l, r] 区间的最长回文串.他可能是[l+1, r] 和[ ...
- HDFS源码分析之EditLogTailer
在FSNamesystem中,有这么一个成员变量,定义如下: /** * Used when this NN is in standby state to read from the shared e ...
- spring整合hibernate,在获取sessionFactory的时候报错,求解决办法!!
applicationContext.xml文件 <!-- 开启扫包 --> <context:component-scan base-package="cn.edu&qu ...
- 设置Eclipse中properties文件打开方式myeclipse一样有source和properties两个视图方法
东北大亨: 说明:如果想在eclipse的properties文件打开的方式出现source和properties视图就需要添加JBossTools插件 下面介绍如果添加插件: 1.打开官网 http ...
- C#中特性,以及应用场景(收藏链接)
1:http://www.tracefact.net/CLR-and-Framework/Reflection-Part3.aspx 2:http://www.cnblogs.com/landeanf ...
- Vue引入js、css文件
1.js调用方法一:这是组件内调用,非公共js 2.js调用方法二:公共jsmain.js内加入公共jsVue.prototype.timeago = timeago 3.引入公共css在main.j ...
- input file 选择Excel
说明:开发环境 vs2012 asp.net mvc4 c# ,使用file 选择Excel文件 传到后台 使用Aspose.Cells获取Excel sheet页的名称 1.HTML代码 <% ...