题解-Little C Loves 3 III
给定 \(n\) 和序列 \(a_0,a_1,\dots,a_{2^n-1}\) 和 \(b_0,b_1,\dots,b_{2^n-1}\),求序列 \(c_0,c_1,\dots,c_{2^n-1}\) 满足
\[c_i=\left(\sum_{j|k=i,j\&k=0} a_j\cdot b_k\right)\bmod 4
\]
数据范围:\(a_i,b_i\in[0,3]\),\(0\le n\le 21\)。
看到 \(j|k=i\) 便知道要搞个 \(or\) 运算的 \(\texttt{FWT}\),但是如何使得同时满足条件 \(j\&k=0\) 呢?
设 \(bits(x)\) 表示 \(x\) 在二进制下的位数。
考虑如下 \(3\) 个可以利用的因素:
\(\bmod 4\) 相当于在二进制下取两位。
同时满足 \(j|k=i,j\&k=0\) 必有 \(bits(j)+bits(k)=bits(i)\)。
如果满足 \(j|k=i\),且 \(bits(i)\) 一定,必有 \(bits(j)+bits(k)\ge bits(i)\)。
所以可以令 \(f_i=a_i\cdot 4^{bits(i)},g_i=b_i\cdot 4^{bits(i)}\),通过 \(\texttt{FWT}\) 得到 \(ans_i=\sum_{j|k=i}f_j\cdot g_k\),然后最后的答案 \(c_i=\left(\frac{ans_i}{4^{bits(i)}}\right)\bmod 4\)。
抽象地解释一下:
\(\texttt{[]}\) 表示两个二进制位(为 \(0\)),\(\texttt{<>}\) 表示其他(除了答案两位)位的值,是由 \(c_i\) 溢出两位或者由满足 \(bits(j)+bits(k)>bits(i)\) 的 \(j,k\) 变换得的值,可以抛弃。
\(f_j:a_j\underbrace{\texttt{[][]...[][]}}_{bits(j)'s \texttt{[]}}\)
\(g_k:b_k\underbrace{\texttt{[][]...[][]}}_{bits(k)'s \texttt{[]}}\)
\(ans_i:\texttt{<><>...<><>}c_i\underbrace{\texttt{[][]...[][]}}_{bits(i)'s \texttt{[]}}\)
小蒟蒻或许讲不清楚,但我就这个水平了。放代码吧,注意 \(f_j,g_k\) 开 \(\texttt{long long}\)。
//Data
const int M=21,N=1<<M;
int n,m,bit[N+7];
int bits(int x){return (x==0)?0:bit[x]?bit[x]:(bit[x]=bits(x-(x&-x))+1);}
//FWT
void fwt(lng f[],int t){ //or fwt 模板
for(int mid=1;mid<n;mid<<=1)
for(int i=0;i<n;i+=mid<<1)
for(int j=i;j<mid+i;j++) f[mid+j]+=f[j]*t;
}
lng f[N+7],g[N+7],ans[N+7];
//Main
int main(){
n=1<<(m=ri);
for(int i=0,c;i<n;i++){
while(!isdigit(c=fr()));
f[i]=(15ll&c)<<(bits(i)<<1);
//这题是在 CF 上交的,有很多奇奇怪怪的错误,反正这里只能写 15ll&c,写 (lng)(c-'0') 都会挂
}
for(int i=0,c;i<n;i++){
while(!isdigit(c=fr()));
g[i]=(15ll&c)<<(bits(i)<<1);
}
fwt(f,1),fwt(g,1);
for(int i=0;i<n;i++) ans[i]=f[i]*g[i]; // CF 会显示这里挂了
fwt(ans,-1);
for(int i=0;i<n;i++) printf("%lld",(ans[i]>>(bits(i)<<1))&3);
putchar('\n');
return 0;
}
萌新初学多项式,巨佬多多指教,觉得写得不清楚就在评论中随意 \(\texttt{D}\)。祝大家学习愉快!
题解-Little C Loves 3 III的更多相关文章
- hdu 5266 pog loves szh III(lca + 线段树)
I - pog loves szh III Time Limit:6000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I ...
- 【题解】DZY Loves Chinese
[题解]DZY Loves Chinese II 不吐槽这题面了... 考虑如何维护图的连通性,如果把图的变成一颗的\(dfs\)生成树,那么如果把一个节点的父边和他接下来所有的返祖边删除,那么我们就 ...
- HDU 5266 pog loves szh III(区间LCA)
题目链接 pog loves szh III 题意就是 求一个区间所有点的$LCA$. 我们把$1$到$n$的$DFS$序全部求出来……然后设$i$的$DFS$序为$c[i]$,$pc[i]$为$c ...
- HDU 5266 pog loves szh III ( LCA + SegTree||RMQ )
pog loves szh III Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
- 题解-ARC058D Iroha Loves Strings
题面 ARC058D Iroha Loves Strings 给定 \(n\) 个字符串,从中选出若干个按给出顺序连接起来,总长等于 \(m\),求字典序最小的,保证有解. 数据范围:\(1\le n ...
- 洛谷月赛2018.8 T1题解(U28036 Nagisa loves Tomoya)
[题解] 我们设原来的数组为a1,a2,a3..., 那么一次操作之后的数组变为a1+a2,a2+a3,a3+a4..., 两次操作之后数组变为a1+2a2+a3,a2+2a3+a4,a3+2a4+a ...
- HDU 5266 pog loves szh III (LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5266 题目就是让你求LCA,模版题.注意dfs会栈溢出,所以要扩栈,或者用bfs写. #pragma ...
- HDU 5266 pog loves szh III
题意:给出一棵树,1为根节点,求一段区间内所有点的最近公共祖先. 解法:用一棵线段树维护区间LCA.LCA是dp做法.dp[i][j]表示点i的第2^j个祖先是谁,转移方程为dp[i][j] = dp ...
- HDU 5266 pog loves szh III (线段树+在线LCA转RMQ)
题目地址:HDU 5266 这题用转RMQ求LCA的方法来做的很easy,仅仅须要找到l-r区间内的dfs序最大的和最小的就能够.那么用线段树或者RMQ维护一下区间最值就能够了.然后就是找dfs序最大 ...
随机推荐
- 剑指offer刷题(栈、堆、 队列、 图)
Stack & Queue 005-用两个栈实现队列 题目描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 push 和 pop ,分别完成在队列尾部插入整数和在队列头部删除整数 ...
- 掉电后osdmap丢失无法启动osd的解决方案
前言 本篇讲述的是一个比较极端的故障的恢复场景,在整个集群全部服务器突然掉电的时候,osd里面的osdmap可能会出现没刷到磁盘上的情况,这个时候osdmap的最新版本为空或者为没有这个文件 还有一种 ...
- Serilog 源码解析——数据的保存(下)
上一篇中,我们提到了日志数据是如何进行解析了.然而,Serilog 灵活采用了不同的策略(Policy)决定一个日志对象如何解析到LogEventPropertyValue的子类对象中,即采用了ISc ...
- Hadoop框架:MapReduce基本原理和入门案例
本文源码:GitHub·点这里 || GitEE·点这里 一.MapReduce概述 1.基本概念 Hadoop核心组件之一:分布式计算的方案MapReduce,是一种编程模型,用于大规模数据集的并行 ...
- 深度分析:java8的新特性lambda和stream流,看完你学会了吗?
1. lambda表达式 1.1 什么是lambda 以java为例,可以对一个java变量赋一个值,比如int a = 1,而对于一个方法,一块代码也是赋予给一个变量的,对于这块代码,或者说被赋给变 ...
- CDR征稿-CorelDRAW征文活动开始啦!
学习平面设计的小伙伴对CorelDRAW一定不陌生,CorelDRAW和Photoshop.illustrator以及 InDesign是做设计必备的四款工具.如果您是CorelDRAW专家.培训讲师 ...
- guitar pro 系列教程(十):关于Guitar Pro声部的使用技巧
作为一个刚接触吉他的萌音乐的玩家,我们在创作吉他谱时一定要注意其中的声部搭配,因为各个声部的配器音色和旋律会对我们的曲子有着非常重要的影响,而声部的把控技术,也可以体现一个音乐人的能力水平的一方面.今 ...
- 「LOJ 3153」 「JOI Open 2019」三级跳
题面 LOJ 3153 solution 对于任意一对\(A,B\),若区间\([A,B]\)中存在一个数权值大于\(A\)或\(B\),则用这个数来替代\(A\)或\(B\)显然更优. 故只需要考虑 ...
- 【操作系统】先来先服务和短作业优先算法(C语言实现)
[操作系统] 先来先服务算法和短作业优先算法实现 介绍: 1.先来先服务 (FCFS: first come first service) 如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列 ...
- 【译】用 React 和 D3 创建图表
本文翻译自:https://dzone.com/articles/charts-with-modern-react-and-d3 本文将介绍如何利用 D3JS 和 ReactJS 来创建基础图表. R ...