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 ...
随机推荐
- NYOJ 85:有趣的数(打表,规律)
85-有趣的数 内存限制:64MB 时间限制:3000ms 特判: No 通过数:8 提交数:12 难度:2 题目描述: 把分数按下面的办法排成一个数表. 1/1 1/2 1/3 1/4- 2/1 2 ...
- django 有关session内部函数做法
session在set和调用时其实分别做了三步: def fileupload(request): request.session['k1'] = 'ppp' ''' .生成一个随机字符串 .set_ ...
- KMP算法自我理解 和 模板
字符串 abcd abc abcd abc 匹配串 cdabcd 匹配串的 next 0 0 0 0 1 2: 开始匹配 abcd abc abcd abc cd abc d a,d 匹配失 ...
- Python 3.5 in win10 pip install Orange3
http://www.lfd.uci.edu/%7Egohlke/pythonlibs/ 下载Orange3 以及 依赖包 注意网页上标出的Orange 的依赖,以及 https://github.c ...
- 验证远程主机SSH指纹
转自:https://marskid.net/2018/02/05/how-to-verify-ssh-public-key-fingerprint/ 使用SSH进行远程连接新的主机的时候,经常会看到 ...
- sqler sql 转rest api 的docker image
最新sqler 又发布了一个版本,同时官方文档也更新,对于数据库的连接有了详细的说明 Dockerfile 为了方便以及减少大小,使用多阶段构建,同时都通过环境变量运行 FROM alpine:lat ...
- hasura graphql-engine v1.0.0-alpha30 remote schema stitch 试用
新的hasura graphql-engine 代码仓库中已经包含了一个基于express 的简单graphql server, 可以用来测试模式拼接 graphql server 代码 项目结构 ├ ...
- Avoiding post increase or decrease
When we write a loop, most of us will use post increase or decrease, but there is a better solution. ...
- cJSON学习笔记 续集
0.前言 本文试图说明怎样使用CJSON构造各种各样的JSON数据包.在前段时间已经写过一篇cJSON的文章,所以本文成为"续集". [相关博文] [前端学 ...
- 深入理解计算机系统 (Randal E.Bryant / David O'Hallaron 著)
第1章 计算机系统漫游 (已看) 1.1 信息就是位+上下文 1.2 程序被其他程序翻译成不同的格式 1.3 了解编译系统如何工作是大有益处的 1.4 处理器读并解释存储在内存中的指令 1.4.1 系 ...