【cf contest 1119 H】Triple
题目
给出 \(n\) 个三元组\(\{ a_i,b_i,c_i \}\)和\(x,y,z\);
将每个三元组扩展成(\(x\)个\(a_i\),\(y\)个\(b_i\),\(z\)个\(c_i\));
问从\(n\)组里面每组选一个数,这\(n\)个数异或值为x 的方案数\(mod \ 998244353\)是多少;
\(1 \le n \le 10^5 \ , \ 1 \le k \le 17 \ , \ 0 \le x,y,z \le 10^9 \ , 0 \le \ a_i,b_i,c_i \lt 2^k\) ;
题解
最后的答案异或一个 \(\oplus_{i=1}^{n} a_i\) ,令\(\{a_i,b_i,c_i\}\)变成$ { 0 , a_i \wedge b_i , a_i \wedge c_i } $ ;
令\(F_{i,0}+=x \ , \ F_{i,b_i}+=y \ , \ F_{i,c_i}+=z\) ,把所有\(fwt(F_i)\)点乘起来再\(ifwt\)回去即可;
考虑如何求最后的乘积\(\Pi F_i\);
对于\(fwt(F_i)\),每一项一定都是\(x+y+z \ , \ x+y-z \ , \ x-y+z \ , x - y - z\) 之一;
设纵向的个数为\(i,j,k,l\),解出每一位\(i,j,k,l\)即可快速算出最后的乘积,首先:
\[\begin{align}
i +j +k + l = n
\end{align}
\]令只考虑\(F_i,b_i=1\),设所有\(F\)加起来\(fwt\)到得到对应位值上的值为\(p\)(x=0,y=1,z=0):
\[i + j - k - l = p
\]同理只令\(F_i,c_i = 1\),有(x=0,y=0,z=1):
\[i - j + k - l = p
\]令\(F_{i,b_i \wedge c_i}=1\),相当于上面两个的点值乘法,有
\[i - j - k + l = p
\]解方程即可;
最后\(ifwt\)回来;
#include<bits/stdc++.h>
#define mod 998244353
#define ll long long
using namespace std;
const int N=1<<17;
int n,X,Y,Z,l,s;
int A[N],B[N],C[N],ans[N];
char gc(){
static char*p1,*p2,S[1000000];
if(p1==p2)p2=(p1=S)+fread(S,1,1000000,stdin);
return(p1==p2)?EOF:*p1++;
}
int rd(){
int x=0;char c=gc();
while(c<'0'||c>'9')c=gc();
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+c-'0',c=gc();
return x;
}
int pw(int x,int y){
int re=1;
while(y){
if(y&1)re=(ll)re*x%mod;
y>>=1;x=(ll)x*x%mod;
}
return re;
}
void fwt(int*a){
for(int i=1;i<l;i<<=1)
for(int j=0;j<l;j+=i<<1)
for(int k=0;k<i;++k){
int t1=a[j+k],t2=a[j+k+i];
a[j+k]=t1+t2;
a[j+k+i]=t1-t2;
}
}
void dec(int&x,int y){x-=y;if(x<0)x+=mod;}
void ifwt(int*a){
for(int i=1;i<l;i<<=1)
for(int j=0;j<l;j+=i<<1)
for(int k=0;k<i;++k){
int iv2=(mod+1)/2;
int t1=a[j+k],t2=a[j+k+i];
a[j+k]=(ll)(t1+t2)*iv2%mod;
a[j+k+i]=(ll)(t1-t2+mod)*iv2%mod;
}
}
int main(){
//freopen("H.in","r",stdin);
//freopen("H.out","w",stdout);
n=rd();l=1<<rd();
X=rd();Y=rd();Z=rd();
for(int i=1;i<=n;++i){
int a=rd(),b=rd(),c=rd();
s^=a;b^=a;c^=a;a=b^c;
A[b]++,B[c]++,C[a]++;
}
fwt(A);fwt(B);fwt(C);
int t1=((ll)X+Y+Z)%mod;
int t2=((ll)X+Y-Z+mod)%mod;
int t3=((ll)X-Y+Z+mod)%mod;
int t4=((ll)X-Y-Z+mod+mod)%mod;
for(int i=0;i<l;++i){
ans[i] =
(ll)pw(t1,(n+A[i]+B[i]+C[i])>>2)
*pw(t2,(n+A[i]-B[i]-C[i])>>2)%mod
*pw(t3,(n-A[i]+B[i]-C[i])>>2)%mod
*pw(t4,(n-A[i]-B[i]+C[i])>>2)%mod;
}
ifwt(ans);
for(int i=0;i<l;++i)printf("%d ",ans[i^s]);
return 0;
}
【cf contest 1119 H】Triple的更多相关文章
- 【cf contest 1119 G】Get Ready for the Battle
题目 你有\(n\)个士兵,需要将他们分成\(m\)组,每组可以为0: 现在这些士兵要去攻打\(m\)个敌人,每个敌人的生命值为\(hp_i\) : 一轮游戏中一组士兵选定一个攻打的敌人,敌人生命值- ...
- 【codeforces contest 1119 F】Niyaz and Small Degrees
题目 描述 \(n\) 个点的树,每条边有一个边权: 对于一个 \(X\) ,求删去一些边后使得每个点的度数 \(d_i\) 均不超过 \(X\) 的最小代价: 你需要依次输出 \(X=0 \to n ...
- B. Lost Number【CF交互题 暴力】
B. Lost Number[CF交互题 暴力] This is an interactive problem. Remember to flush your output while communi ...
- 【CF contest/792/problem/E】
E. Colored Balls time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- 【cf补题记录】Codeforces Round #608 (Div. 2)
比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\ ...
- 3.26-3.31【cf补题+其他】
计蒜客)翻硬币 //暴力匹配 #include<cstdio> #include<cstring> #define CLR(a, b) memset((a), (b), s ...
- 【郑轻邀请赛 H】 维克兹的进制转换
[题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2134 [题意] [题解] 设f[i]表示数字i分解为二进制数的方案数; 则 如果i为 ...
- 【cf 483 div2 -C】Finite or not?(数论)
链接:http://codeforces.com/contest/984/problem/C 题意 三个数p, q, b, 求p/q在b进制下小数点后是否是有限位. 思路 题意转化为是否q|p*b^x ...
- 【CF 189A Cut Ribbon】dp
题目链接:http://codeforces.com/problemset/problem/189/A 题意:一个长度为n的纸带,允许切割若干次,每次切下的长度只能是{a, b, c}之一.问最多能切 ...
随机推荐
- 全栈项目|小书架|微信小程序-登录回调及获取点赞列表功能
效果图 这一节介绍,登录回调 以及 喜欢列表 的实现. 登录回调:这里是指在获取登录完成之后,再进行下一步的操作. 比如效果图中我的页面,默认是未登录状态,积分和喜欢列表的数量都没有获取到. 而登录成 ...
- 正在阅读的tex教程
https://liam.page/2014/09/08/latex-introduction/ https://www.jianshu.com/p/1d99b3c883a6 http://www.c ...
- 在 Target 中获取项目引用的所有依赖(dll/NuGet/Project)的路径
原文:在 Target 中获取项目引用的所有依赖(dll/NuGet/Project)的路径 在项目编译成 dll 之前,如何分析项目的所有依赖呢?可以在在项目的 Target 中去收集项目的依赖. ...
- .net core中的Session以及HttpContext对象使用小结
session用于识别用户并保持用户信息,就是一个会话 ,在浏览器不关闭的前提下,可以保存用户的信息,比如登录的保存用户信息从一个网页跳转到另一个网页,你的用户信息就可以用session. .net ...
- C# vb .net实现拉伸效果滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的拉伸效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...
- 微信小程序下拉框组件
>>下拉组件 1.组件结构: 2.index.js: //index.js Component({ /** * 组件的属性列表 */ properties: { propArray: { ...
- JS中的七大数据类型
js中有7种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object)以及es6语法新增的Symbol数据类型 es ...
- nginx配置访问xx.com跳转www.xx.com
二.在nginx里面配置 rewrite 规则.打开 Nginx.conf 文件找到server配置段:[以下是我的server配置段] 禁止IP地址访问 server{ listen 80 defa ...
- 【CMDB】API传输验证
客户端向服务器发送请求时,在请求头添加自定义的字符串 客户端的加密方式 1.对key+time进行md5加密 2.发送的时候的格式为md5_key|time,将时间也发送过去 服务器端验证 1.获取加 ...
- thymeleaf教程-springboot项目中实现thymeleaf自定义标签
转载: http://www.9191boke.com/466119140.html 91博客网 开始: 在使用thymeleaf的过程中有时候需要公共部分渲染页面,这个时候使用自定义标签实现自 ...