题解 CF914G Sum the Fibonacci】的更多相关文章

题目传送门 题目大意 给出\(n,s_{1,2,...,n}\),定义一个五元组\((a,b,c,d,e)\)合法当且仅当: \[1\le a,b,c,d,e\le n \] \[(s_a\vee s_b)\wedge s_c \wedge (s_d\oplus s_e)=2^i,i\in \mathbb{Z} \] \[s_a\wedge s_b=0 \] 求出对于所有合法的五元组\((a,b,c,d,e)\): \[\sum f(s_a\vee s_b)f(s_c)f(s_d\oplus s…
CF914G Sum the Fibonacci(FWT,FST) Luogu 题解时间 一堆FWT和FST缝合而来的丑陋产物. 对 $ cnt[s_{a}] $ 和 $ cnt[s_{b}] $ 求FST,对 $ cnt[s_{d}] $ 和 $ cnt[s_{e}] $ 求异或卷积,然后对 $ cnt[ s_{ a }| s_{ b } ] \times f[ s_{ a }| s_{ b } ] $ , $ cnt[ s_{ c } ] \times f[ s_{ c } ] $ , $…
题面 题解 这是一道FWT和子集卷积的应用题. 我们先设 cnt[x] 表示 Si = x 的 i 的数量,那么 这里的Nab[x]指满足条件的 Sa|Sb=x.Sa&Sb=0 的(a,b)二元组数量,这个可以通过子集卷积快速求出,复杂度为 然后又设 那么就把答案简化为了 我们可以再次简化,设 这里的Nde[x]指满足条件的 Sd^Se=x 的(d,e)二元组数量,用FWT卷积求出,那么如果 就可以把答案简化为 最后考虑枚举  ,设答案为 所以我们就把它转化为了卷积的形式,用FWT这道题就完了.…
传送门 一道良心的练习FWT和子集卷积的板子-- 具体来说就是先把所有满足\(s_a \& s_b = 0\)的\(s_a \mid s_b\)的值用子集卷积算出来,将所有\(s_a \oplus s_b\)用xor卷积算出来,把斐波那契数代进去,然后将三个数组and卷积,最后取\(2^i (i \in Z)\)的位置的答案的和 #include<bits/stdc++.h> //this code is written by Itst using namespace std; int…
解:发现我们对a和b做一个集合卷积,对d和e做一个^FWT,然后把这三个全部对位乘上斐波那契数,然后做&FWT就行了. #include <bits/stdc++.h> , MO = 1e9 + , inv2 = (MO + ) / ; ][N], e[][N]; inline void FWT_or(int *a, int n, int f) { ; len < n; len <<= ) { ; i < n; i += (len << )) { ;…
[CF914G]Sum the Fibonacci 题解:给你一个长度为n的数组s.定义五元组(a,b,c,d,e)是合法的当且仅当: 1. $1\le a,b,c,d,e\le n$2. $(s_a|s_b) \& s_c \& (s_d $^$ s_e)=2^i$,i是某个整数3. $s_a \& s_b=0$ 求$\sum f(s_a|s_b) * f(s_c) * f(s_d $^$ s_e)$,f是斐波那契数列,对于所有合法的五元组(a,b,c,d,e).答案模$10^9…
题意:给一个数组s,求\(f(s_a | s_b) * f(s_c) * f(s_d \oplus s_e)\),f是斐波那契数列,而且要满足\(s_a\&s_b==0\),\((s_a | s_b)\&s_c\&(s_d \oplus s_e)=2^{i}\) 题解:先求\(A_k=f(k)*\sum_{i|j==k\&\&i\&j==0}s_a*s_b\),明显是个子集卷积,在求出\(B_k=f(k)*s_k\),\(C_k=f(k)*\sum_{i \…
题目描述 给出一个长度为 $n$ 的序列 $\{s\}$ ,对于所有满足以下条件的五元组 $(a,b,c,d,e)$ : $1\le a,b,c,d,e\le n$ : $(s_a|s_b)\&s_c\&(s_d\text{^}s_e)=2^i$ ,其中 $i$ 为非负整数 : $s_a\&s_b=0$ . 求 $f(s_a|s_b)\times f(s_c)\times f(s_d\text{^}s_e)$ 的和模 $10^9+7$,其中 $f(i)$ 表示斐波那契数列的第 $i…
题目地址:https://oj.leetcode.com/problems/two-sum/ Two Sum Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, w…
1.题目描述 2.问题分析 记录所有路径上的值,然后转换为int求和. 3.代码 vector<string> s; int sumNumbers(TreeNode* root) { traverse(root, ""); ; for(auto it = s.begin(); it != s.end(); it++) { sum += stoi(*it); } return sum; } void traverse(TreeNode *t, string str) { if…