Codeforces 1119H - Triple(FWT)】的更多相关文章

Codeforces 题目传送门 & 洛谷题目传送门 FWT 的 immortal tea %%% 首先我们可以写出一个朴素的 \(dp\),设 \(dp_{i,j}\) 表示考虑前 \(i\) 个三元组中取数异或和为 \(j\) 的方案数,那么显然有 \(dp_{i,j}=Xdp_{i-1,j\oplus a_i}+Ydp_{i-1,j\oplus b_i}+Zdp_{i-1,j\oplus c_i}\),这样暴力复杂度是 \(n2^k\) 的,无法通过. 考虑优化,不难发现这个 \(dp\)…
[CF850E]Random Elections(FWT) 题面 洛谷 CF 题解 看懂题就是一眼题了... 显然三个人是等价的,所以只需要考虑一个人赢了另外两个人就好了. 那么在赢另外两个人的过程中,一定是两个长度为\(2^n\)的二进制串的对应值都是\(1\). 考虑每个人投票的贡献,如果是\(00\)或者\(11\)那么有两种排列,如果是\(01\)或者\(10\)就只有一种合法排列. 那么对于长度为\(2^n\)的数组自己对自己做一次异或卷积,每个数的贡献就是\(2\)的\(0\)的个数…
[CF662C]Binary Table(FWT) 题面 洛谷 CF 翻译: 有一个\(n*m\)的表格(\(n<=20,m<=10^5\)), 每个表格里面有一个\(0/1\), 每次可以将一行或者一列的\(01\)全部翻转 回答表格中最少有多少个\(1\) 题解 发现\(n\)很小,\(m\)很大 状压是跑不掉了 如果我们确定翻转哪些行,那么答案唯一确定(贪心的选每一列中\(0/1\)的较小值) 相同的列显然可以合并, 把每一列按照\(01\)状压,记\(a[i]\)为状态为\(i\)的列…
「WC2018」州区划分(FWT) 我去弄了一个升级版的博客主题,比以前好看多了.感谢 @Wider 不过我有阅读模式的话不知为何 \(\text{LATEX}\) 不能用,所以我就把这个功能删掉了. 洛谷上不开 \(O_2\) 根本过不去,自带大常数被卡到 \(15\) 分... 首先题了读了很久,发现一个州的集合可以不连通... 我们可以 \(O(n^22^n)\) 检验每一个状态是否满足条件,用并查集即可. \(f[S]\) 为状态 \(S\) 时的满意度之和,\(g[S]\) 当状态 \…
[HDU5909]Tree Cutting(FWT) 题面 vjudge 题目大意: 给你一棵\(n\)个节点的树,每个节点都有一个小于\(m\)的权值 定义一棵子树的权值为所有节点的异或和,问权值为\(0..m-1\)的所有子树的个数 题解 考虑\(dp\) 设\(f[i][j]\)表示以\(i\)为根节点的子树中,异或和为\(j\)的子树的个数 很显然,每次合并就是两个\(dp\)值做\(xor\)卷积 那么直接用\(FWT\)优化就行了 #include<iostream> #inclu…
[UOJ#310][UNR#2]黎明前的巧克力(FWT) 题面 UOJ 题解 把问题转化一下,变成有多少个异或和为\(0\)的集合,然后这个集合任意拆分就是答案,所以对于一个大小为\(s\)的集合,其贡献是\(2^s\). 于是我们可以弄出若干个\((1+2x^{a_i})\)这样子的多项式,然后异或卷积把它们卷起来就是答案. 根据\(FWT\)异或卷积的理论,如果\(i\)位置有一个\(1\),那么\(FWT\)之后对于\(j\)位置的贡献是\(-1^{pop\_count(i\&j)}\).…
题目 Source http://codeforces.com/contest/663/problem/E Description You are given a table consisting of n rows and m columns. Each cell of the table contains either 0 or 1. In one move, you are allowed to pick any row or any column and invert all value…
http://codeforces.com/problemset/problem/615/D 题意 给出m个质因子,组成一个数n.问n的约数的乘积是多少,输出mod 1e+7的结果. 分析 从输入我们能知道这个数的所有质因子以及它们的个数.最后答案一定是ans=π p[i]^k[i] (p[i]为质因子,k[i]为最终乘积中的个数). 那么主要问题就是怎么求这个k[i]了.现在我们只关注一个质因子p,它的个数为num,那么其它质因子都有num[i]+1种可选择,根据乘法原理,当我们选定p时,其它…
定义 FWT是一种快速完成集合卷积运算的算法. 它可以用于求解类似 $C[i]=\sum\limits_{j⊗k=i}A[j]*B[k]$ 的问题. 其中⊗代表位运算中的|,&,^的其中一种. 求解(正变换) 设F(A)是对于A的一种变换. 并且F(A)要求满足:  $F(A)*F(B)=F(A⊗B)$ ①  $k*F(A)=F(k*A)$   ②   $F(A+B)=F(A)+F(B)$  ③ (A,B长度相同) 鉴于FWT和FFT长得特别像(而且求解的问题也比较类似),我们可以借鉴一下FFT…
CodeForces 592A 题意:在8*8棋盘里,有黑白棋,F1选手(W棋往上-->最后至目标点:第1行)先走,F2选手(B棋往下-->最后至目标点:第8行)其次.棋子数不一定相等,F1,F2中其中一个           棋子最先到达目标点对应方胜利. 思路:W,B棋子分别只能上.下,所以需知道:离第一行最近的W棋距离S1(并且这个W上方没有B),离第八行最近的B棋距离S2(这个B下方没有W) 胜利者为 S1<=S2?F1:F2 注意:S1==S2时 F1胜. 代码: #inclu…
CodeForces 588A 题意:Duff喜欢吃肉,想在接下来的n天,每天都有Ai斤肉吃,但每一天肉的单价Pi不定,肉 可以保存不过期,现已知n天每天肉的斤数Ai,以及单价Pi,为了使每天都             有想要的Ai斤肉吃,求最小花费.  思路:cost=Ai*min(pi)  1<=i<=n; 代码: #include <iostream> #include <cstdio> #include <cstring> using namespa…
题目链接:http://codeforces.com/problemset/problem/831/C 题意:有一位参赛选手,我们不知道他初始或最后的成绩,但是知道k次评审所加(减)的分数,以及n个在这过程中的他的分数.问这名选手初始分有几种情况. 思路:一开始考虑先求出评审分的前缀和,对过程分减去前缀和就能得到的初始分数,求出所有的初始分数情况,用map记录每个初始分重复的次数,重复次数==n 的即为正确的初始分. 然而这么做是WA了的. 分析第一个样例: 4 1-5 5 0 2010 如果按…
题目链接:http://codeforces.com/contest/710/problem/E 题意:开始文本为空,可以选择话费时间x输入或删除一个字符,也可以选择复制并粘贴一串字符(即长度变为两倍),问要获得长度为n的串所需最少的时间. 思路:dp[i]表示获得长度为i的串所需要的最短时间,分i为奇数和偶数讨论. #include<bits/stdc++.h> using namespace std; const int N=1e7+3; typedef long long ll; ll…
题意 给出 \(n\) 个数 \(\{a_1, \cdots, a_n\}\),从中选出两个互不相交的集合(不能都为空),使得第一个集合与第二个集合内的数的异或和相等,求总方案数 \(\bmod 998244353\) . \(n, a_i \le 10^6\) 题解 简单转化一下,其实就是对于每个选取集合中元素异或积为 \(0\) 的集合,都会有 \(2^{|S|}\) 的贡献. 用集合幂级数形式写出来其实就等价于: \[ \prod_{i = 1}^{n} (1 + 2x^{a_i}) \]…
题面 传送门 设\(a\)的递推公式为 \[a_i=\sum_ja_jb[count(i\oplus j)]\] 其中\(\oplus\)为异或,\(count(i)\)表示\(i\)的二进制中\(1\)的个数 给出\(a_0,b\),求\(a_t\),\(t\leq 10^{18}\) 题解 如果我们定义\(c_i=b[count(i)]\) 这显然就是个异或卷积了--因为要卷\(t\)次,所以点值表示乘起来的时候要把\(c_i\)快速幂一下 然而有个尴尬的问题就是这里的模数可能是偶数--那么…
概述 FWT的大体思路就是把要求的 C(x)=A(x)×B(x)  即 \( c[i]=\sum\limits_{j?k=i} (a[j]*b[k]) \) 变换成这样的:\( c^{'}[i]=a^{'}[i]*b^{'}[i] \). 只要知道 c'[ i ] 和 c[ i ] 的关系,就能把 A(x).B(x) 变成 A'(x).B'(x) ,从而算出 C'(x) ,再把 C'(x) 变成 C(x). 或卷积 定义\( c^{'}[i]=\sum\limits_{j | i=i} c[j]…
传送门(uoj) 传送门(洛谷) 全世界都会子集卷积就咱不会--全世界都在写\(FMT\)就咱只会\(FWT\)-- 前置芝士 或运算\(FWT\)或者\(FMT\) 左转洛谷模板区,包教包会 子集卷积 定义:对于两个集合幂级数\(F,G\),它们的子集卷积\(H\)定义为\[H_S=\sum_{T\subseteq S}F_TG_{S-T}\] 简单来说就是两个下标要满足的条件为\(L\cap R=\varnothing\)且\(L\cup R=S\) \(L\cup R=S\)就是个异或卷积…
开头Orz hy,Orz yrx 部分转载自hy的博客 快速沃尔什变换,可以快速计算两个多项式的位运算卷积(即and,or和xor) 问题模型如下: 给出两个多项式$A(x)$,$B(x)$,求$C(x)$满足$C[i]=\sum\limits_{j⊗k=i}A[j]*B[k]$. 约定记号 $⊗$表示某种位运算(and,or和xor中的一种),若$a$,$b$是两个整数,则$a⊗b$表示对这两个数按位进行位运算:若$A$,$B$是两个多项式,则$A⊗B$表示对这两个多项式做如上卷积:两个多项式…
Educational Codeforces Round 64 CodeForces 1156A 题意:1代表圆,2代表正三角形,3代表正方形.给一个只含1,2,3的数列a,ai+1内接在ai内,求总共有多少个交点. 交了好多遍才过.分类讨论一下内接的情况,然后注意到当正方形内接圆形再内接三角形时会有一个点重复,减去即可. code #include<cstdio> ],ans,flag,haha[][]; int main() { scanf("%d",&n);…
Codeforces 题目传送门 & 洛谷题目传送门 考虑什么样的 2-染色方式是符合题目要求的,首先蓝.黄颜色所形成的连通块个数必须 \(\le 2\),否则一定不合法,而显然如果两种颜色连通块个数都为 \(1\) 也不合法,以蓝色连通块个数为 \(1\),黄色连通块个数为 \(2\) 为例,稍微画个图即可发现合法的染色方式都如下图所示: 也就是说存在一个分割点 \(i\),使得第一个连通块全部在第 \(i\) 列左侧,第二个连通块全部在第 \(i\) 列右侧,那么显然两个连通块与第 \(i\…
Atcoder 题面传送门 & 洛谷题面传送门 tsc 考试前 A 的题了,结果到现在才写这篇题解--为了 2mol 我已经一周没碰键盘了,现在 2mol 结束算是可以短暂的春天 短暂地卷一会儿 OI 了(( u1s1 写这篇题解的时候我连题都快忘了... 首先设 \(b_i=\dfrac{A_i}{\sum\limits_{j=0}^{2^n-1}A_j}\),其次碰到这种期望类的题目我们考虑套路地设 \(p_i\) 表示异或得到 \(i\) 的概率,那么有 \(p_i=\sum\limits…
题面 出自HDU6057 给你两个数列 A [ 0... 2 m − 1 ] A[0...2^m-1] A[0...2m−1] 和 B [ 0... 2 m − 1 ] B[0...2^m-1] B[0...2m−1]. 请计算数列 C [ 0... 2 m − 1 ] C[0...2^m-1] C[0...2m−1]: C [ k ] = ∑ i    a n d    j = k A [ i    x o r    j ] ∗ B [ i    o r    j ] C[k]=\sum_{i…
A. Grammar Lessons time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standard output Petya got interested in grammar on his third year in school. He invented his own language called Petya's. Petya wanted to…
https://vjudge.net/problem/CodeForces-348D 题意 给一个m*n有障碍的图,求从左上角到右下角两条不相交路径的方案数. 分析 用LGV算法.从(1,1)-(n,m)的除了终点和起点不能相同的路径选取了(1,2),(2,1) 为起点,(n-1,m),(n,m-1) 为终点,因为从1,1出发只有这两个点可以走,到达(n,m)也只有这两个点,所以与原问题等价. #include<iostream> #include<string.h> #inclu…
传送门 题意简述:有一个人上n天课,每天有m个小时的时间安排表(一个01串),为1表示要上课,否则不上课,求出如果可以最多翘kkk节课这nnn天在校待的总时间的最小值(一天必须在所有课上完后才能离开). 背包sbsbsb题. 注意可以从首尾分别逃课. 对于每天的上课情况我们都预处理出一个数组aia_iai​表示这天逃iii节课在校的最少时间. 然后跑分组背包就可以了. 实际上可以滚动数组优化一波. 代码: #include<bits/stdc++.h> #define ri register…
Petya loves volleyball very much. One day he was running late for a volleyball match. Petya hasn't bought his own car yet, that's why he had to take a taxi. The city has n junctions, some of which are connected by two-way roads. The length of each ro…
A Friends Meeting 题意:有两个人在数轴上的不同位置,现在他们需要到一个位置碰面.每次每人只能向左或向右走1个单位,轮流进行.每个人第一次走时疲劳度+1,第二次走时疲劳度+2,以此类推.问两个人碰面时总的疲劳度最小为多少? 思路:碰面位置为(a+b)/2. #include<iostream> #include<cstdio> #include<cmath> using namespace std; int main() { int a,b; scanf…
(点击此处查看原题) 题意分析 给出一个数n,求一个数m,使得m >= n ,并且m 满足: m = ∑ 3 ^ i * x (x = 0 或者 x = 1 ),求出满足条件的最小的m 解题思路 两个题目都是一个题意,只是n的大小不同,所以就不用两个思路了 注意到,我们可以先令 m = ∑ 3 ^ i ,求出此时满足条件的最小的m,随后,因为m在三进制下,每一位都是1,那么如果我们从高位开始,不断地判断 m - 3 ^ i >= n ,如果满足,则令 m -= 3 ^ i ,此时我们删除了当前…
Watchmen are in a danger and Doctor Manhattan together with his friend Daniel Dreiberg should warn them as soon as possible. There are n watchmen on a plane, the i-th watchman is located at point (xi, yi). They need to arrange a plan, but there are s…
题意:一个人绕着一个长度为a的正方形逆时针跑,以(0,0)为起点,喝一次水可以跑d米,问每喝一次水可以跑到的位置坐标. 分析:这道题卡精度卡的太厉害了. 设l是正方形的周长,只有d对l取余且每次跑d米都对l取余,并用取余后的结果继续跑,这样的精度才够. 1.double a = fmod(x, y);返回的是浮点数x对浮点数y取余后的结果. 2.每跑d米,通过对l取余得到当前位置与起点的路径长,从而确定当前位置的坐标. #include<cstdio> #include<cstring&…