uoj#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强
这题的式子形式是异或卷积的三进制推广,因此可以设计一个类似fwt的变换,这里需要一个三次单位根$w$,满足$w^3\%p==1$且$(1+w+w^2)\%p==0$,对给定的模数,在整数中可能找不到满足要求的w,因此考虑模意义的复数域,发现只要用$a+b\frac{\sqrt{3}i}{2}$的形式表示复数,a,b为模p意义下的整数,可以满足要求。时间复杂度$O((m+log(t))3^m)$。
#include<cstdio>
typedef long long i64;
int p,n=,m,t;
struct cplx{
int a,b;
cplx(int _a=,int _b=):a(_a),b(_b){}
cplx operator+(cplx x)const{return cplx((a+x.a)%p,(b+x.b)%p);}
cplx operator*(cplx x)const{return cplx((i64(a)*x.a-3ll*b*x.b)%p,(i64(a)*x.b+i64(b)*x.a)%p);}
cplx operator^(int n)const{
cplx v(),x(a,b);
for(;n;n>>=,x=x*x)if(n&)v=v*x;
return v;
}
}A[],B[];
void dft(cplx*v,int t){
cplx w1=cplx((p-)/,(p+t)/),w2=w1*w1;
for(int i=;i<n;i*=){
for(int j=;j<n;j+=i*){
cplx*a=v+j,*b=a+i,*c=b+i;
for(int k=;k<i;++k){
cplx a1=a[k],b1=b[k],c1=c[k];
a[k]=a1+b1+c1;
b[k]=a1+b1*w1+c1*w2;
c[k]=a1+b1*w2+c1*w1;
}
}
}
if(t==-){
i64 In=,I3=(p*((p+)%?:)+)/;
for(int i=;i<m;++i)In=In*I3%p;
for(int i=;i<n;++i)A[i].a=A[i].a*In%p;
}
}
char ib[],*ip=ib,ob[],*op=ob;
int _(){
int x=;
while(*ip<)++ip;
while(*ip>)x=x*+*ip++-;
return x;
}
void pr(int x){
if(x<)x+=p;
int ss[],sp=;
do ss[++sp]=x%;while(x/=);
while(sp)*op++=ss[sp--]+;
*op++=;
}
int v0[][];
void dfs(int w,int u,int t1,int t2){
if(w==m){
B[u]=v0[t1][t2];
return;
}
u*=;
dfs(w+,u,t1,t2);
dfs(w+,u+,t1+,t2);
dfs(w+,u+,t1,t2+);
}
int main(){
fread(ib,,sizeof(ib),stdin);
m=_(),t=_(),p=_();
for(int i=;i<m;++i)n*=;
for(int i=;i<n;++i)A[i]=_();
for(int i=;i<=m;++i)
for(int j=;j<=m-i;++j)v0[i][j]=_();
dfs(,,,);
dft(A,);
dft(B,);
for(int i=;i<n;++i)A[i]=A[i]*(B[i]^t);
dft(A,-);
for(int i=;i<n;++i)pr(A[i].a);
fwrite(ob,,op-ob,stdout);
return ;
}
uoj#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强的更多相关文章
- [清华集训2016]石家庄的工人阶级队伍比较坚强——三进制FWT
题目链接: [清华集训2016]石家庄的工人阶级队伍比较坚强 题目大意:有$n=3^m$个人玩石头剪刀布,共$t$轮游戏,每轮每个人要和包括自己的所有人各进行$m$次石头剪刀布.每个人在$m$轮中的决 ...
- UOJ272 [清华集训2016] 石家庄的工人阶级队伍比较坚强 【分治乘法】
题目分析: 首先不难注意到式子就是异或卷积,所以考虑用分治乘法推出优化方法.我们把一个整体$f$拆成$f-,f\pm,f+$,然后另一个拆成$g-,g\pm,g+$.这样做的好处是能更清楚的分析问题. ...
- [UOJ#274][清华集训2016]温暖会指引我们前行
[UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...
- UOJ272. 【清华集训2016】石家庄的工人阶级队伍比较坚强 [FWT]
UOJ 思路 很容易想到\(O(3^{3m}\log T)\)的暴力大矩乘,显然过不了. 我们分析一下每次转移的性质.题目给的转移方程是填表法,我们试着改成刷表法看看-- 发现好像没啥用. 注意到游戏 ...
- BZOJ 4732 UOJ #268 [清华集训2016]数据交互 (树链剖分、线段树)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4732 (UOJ) http://uoj.ac/problem/268 题解 ...
- [UOJ#276][清华集训2016]汽水[分数规划+点分治]
题意 给定一棵 \(n\) 个点的树,给定 \(k\) ,求 \(|\frac{\sum w(路径长度)}{t(路径边数)}-k|\)的最小值. \(n\leq 5\times 10^5,k\leq ...
- [uoj272]石家庄的工人阶级队伍比较坚强
假设$x,y\in \{0,1,2\}$,则$x$能赢$y$(根据题中定义)当且仅当$x-y\equiv 1(mod\ 3)$ 定义$\ominus$为两数3进制下不退位的减法,$S_{x}$表示$x ...
- UOJ 275. 【清华集训2016】组合数问题
UOJ 275. [清华集训2016]组合数问题 组合数 $C_n^m $表示的是从 \(n\) 个物品中选出 \(m\) 个物品的方案数.举个例子,从$ (1,2,3)(1,2,3)$ 三个物品中选 ...
- UOJ #269. 【清华集训2016】如何优雅地求和
UOJ #269. [清华集训2016]如何优雅地求和 题目链接 给定一个\(m\)次多项式\(f(x)\)的\(m+1\)个点值:\(f(0)\)到\(f(m)\). 然后求: \[ Q(f,n,x ...
随机推荐
- SFM学习记录(二)
分析生成文件 在.nvm.cmvs/00/下有:(也可能是其他数字) models/option-0000.ply:是生成的密集点云模型 txt:文件夹下(还没弄明白ν_v) visualize:保存 ...
- 20155208徐子涵 2016-2017-2 《Java程序设计》第2周学习总结
20155208徐子涵 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 第三章 基础语法 3.1 类型.变量与运算符 • 关键字:在定义java文件名的时候要 ...
- 在学习linux基础入门时的一些问题总结(1)
本周在实验楼完成了<linux基础入门>的21个实验,虽然之前已经学习过linux的相关课程,对linux下的命令也有一些了解和实践,但完成这21个实验以及35个练习题仍然遇到了许多的问题 ...
- CentOS7.0防火墙以及开关机命令
CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态firewall-cmd --state 停止firewallsystemctl stop firewalld.service ...
- 《DSP using MATLAB》Problem 5.15
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- hdu1159 dp(最长公共子序列)
题意:给两个字符串,求这两个字符串的最长公共子序列的长度 因为之前集训的时候做过,所以现在即使会做也并不是什么稀奇的事,依旧为了自己的浅薄感到羞愧啊``` 解法就是通过两个字符串的每个字符互相比较,根 ...
- css动画和js动画的差异
代码复杂度,js 动画代码相对复杂一些 动画运行时,对动画的控制程度上,js 能够让动画,暂停,取消,终止,css动画不能添加事件 动画性能看,js 动画多了一个js 解析的过程,性能不如 css 动 ...
- redmine和jenkins的ldap登录设置
工具: softeera LDAP browser 流程: Authentication modes » test Name * Host * Port * LDAPS Account Passwo ...
- nginx 镜像使用说明
nginx 镜像说明 目录 说明 /etc/nginx nginx安装目录 /usr/share/nginx/html nginx网站资源存放的目录 运行nginx容器,相关命令: 命令 说明 doc ...
- Iris花逻辑回归与实现
Iris花的分类是经典的逻辑回归的代表:但是其代码中包含了大量的python库的核心处理模式,这篇文章就是剖析python代码的文章. #取用下标为2,3的两个feture,分别是花的宽度和长度: # ...