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 ...
随机推荐
- 【挑战赛16A】【取石子】【组合数学】
链接:https://www.nowcoder.com/acm/contest/113/A 来源:牛客网 取石子时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言5 ...
- redis 部署相关
★ 启动: 配置好环境变量后:打开一个cmd窗口,执行redis-server.exe就可以启动redis了. https://blog.csdn.net/weixin_42423819/articl ...
- C#获取IIS所有站点及虚拟目录和应用程序(包含名称及详细信息)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 二分法求常数E,常数π,根号2
进行单元测试数据____________________________________ public class Test { public static void main(String[] ar ...
- hive query with field is json
if field is json,when query one key from json ,it will help you . select idfa, appid ,appname , coun ...
- Fundamentals of Computer Graphics 中文版(第二版) (Peter Shirley 著)
1 引言 2 数学知识 3 光栅算法 4 信号处理 5 线性代数 6 矩阵变换 7 观察 8 隐藏面消除 9 表面明暗处理 10 光线追踪 11 纹理映射 12 完整的图形流水线 13 图形学的数据结 ...
- :first :first-child .first()和.get() .eq()
:first .first()只匹配一个元素,而 :first-child 将为每个父元素匹配一个子元素 .get()得到的是dom 元素 $('li').get()没有参数返回一个数组 .eq() ...
- java 实现websocket的三种方式
Java中实现websocket常见有以下三种方式: 使用tomcat的websocket实现,需要tomcat 7.x,JEE7的支持. 使用spring的websocket,spring与webs ...
- chmod修改权限
1.命令简介 chmod(Change mode) 用来将每个文件的模式更改为指定值.Linux/Unix 的档案调用权限分为三级 : 档案拥有者.群组.其他. u :目录或者文件的当前的用户 g : ...
- 阅读<Vivado Design Suite Tutorial---Logic Simulation>笔记
阅读<Vivado Design Suite Tutorial---Logic Simulation>笔记 1.建工程,添加仿真文件 2.在IP Catalog里面添加IP核 Sine_h ...