
【算法】压位
文章平均质量分 80
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ3160】万径人踪灭
【题目链接】点击打开链接【思路要点】枚举对称中心,设关于该中心对称点的个数为\(x\),以该点为中心的最长回文子串长度为\(y\),那么该点对答案的贡献应为\(2^x-\lfloor\frac{y+1}{2}\rfloor\)。其中对称点的个数可以通过FFT或bitset压位求出,最长回文子串长度可以用Manacher算法求出。时间复杂度\(O(\frac{N^2}{w})\)或\(O(NLogN...原创 2018-02-26 16:35:18 · 403 阅读 · 0 评论 -
【BZOJ4942】【UOJ314】【NOI2017】整数
【题目链接】BZOJUOJ【思路要点】用线段树模拟整数的加减,通过维护区间信息和区间赋值来实现快速进/退位。具体而言,在每个节点维护该区间是否全为0/1,以及区间赋值懒标记。进行加/减法时现在对应位上进行操作,若涉及进/退位,则在线段树上二分出最近的更高位的0/1,对其进行操作,并将操作位置和该位置之间的区间赋值为1/0。进行压位,进制变为\(2^{30}\)。时间复杂度\(O(NLogN)\)。...原创 2018-05-30 18:09:03 · 414 阅读 · 0 评论 -
【BZOJ5153】【UOJ348】【WC2018】州区划分
【题目链接】BZOJUOJ【思路要点】定义\(sum_S\)表示集合\(S\)包含的城市人口总数的\(p\)次方。定义\(g_S\),当\(S\)是一个合法的州区,\(g_S=sum_S\),否则\(g_S=0\)。定义\(f_S\)表示\(S\)所有可行的州区划分的方案的满意度之和。那么\(f_S=\sum_{T\subseteq S,T\ne\emptyset}\frac{g_T*f_{S-T...原创 2018-06-06 18:45:26 · 528 阅读 · 0 评论 -
【AtCoder】AtCoder Regular Contest 093 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【C】Traveling Plan【思路要点】删除一个点本质上只改变了\(O(1)\)对相邻关系,在总和的基础上调整即可。时间复杂度\(O(N)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;template <typename...原创 2018-06-13 20:58:43 · 470 阅读 · 0 评论 -
【BZOJ5109】【CodePlus2017】大吉大利,晚上吃鸡!
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 50005#define INF 1e18#define P 1000000007template <typename T> void read(T &x) { x = 0; int...原创 2018-06-13 21:04:00 · 430 阅读 · 0 评论 -
【CodeForces】CodeForces Round #403 (Div. 1) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Andryusha and Colored Balloons【思路要点】 显然答案有下界:Max{di+1}Max{di+1}Max\{d_i+1\},其中didid_i为点iii的度数。 我们用构造的方式来说明这个下界是可以取到的。 将度数最大的点作为根...原创 2018-08-07 20:51:15 · 425 阅读 · 0 评论 -
【51Nod1833】环
【题目链接】 点击打开链接 【思路要点】 原题实际上等价于计算二分图不同的完美匹配的数量。 将每个点拆成入点和出点,每条边由出点连向入点,形成的二分图的完美匹配和用简单环覆盖原图的方案一一对应。 状压DPDPDP即可。 时间复杂度O(2N∗N)O(2N∗N)O(2^N*N)。 【代码】 #include<bits/stdc...原创 2018-08-25 11:46:47 · 221 阅读 · 0 评论 -
【CodeChef】October Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接**【BBRICKS】**Beautiful Bricks【思路要点】上下两个砖块中,至多有一个黑色。连续的一段存在黑色的行共有两种放置的方案。枚举有几段连续的存在黑色的行,用组合数计算答案。单组数据时间复杂度 O(K)O(K)O(K) 。【代码】#include&amp;lt;bits/stdc++.h&amp;gt;using namespace ...原创 2018-10-21 10:46:08 · 535 阅读 · 0 评论 -
【CodeForces】Lyft Level 5 Challenge 2018 - Elimination Round (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**King Escape【思路要点】皇后会攻击到 888 条直线,其中 444 条斜向的可以跨过,因此可以忽略。判断起始点和目标点是否在其余 444 条线分割出的同一个联通块内即可。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>us...原创 2018-10-10 15:16:22 · 402 阅读 · 0 评论 -
【CodeForces】Avito Code Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Antipalindrome【思路要点】当所有字符相同,答案为 000 。否则,若原串为回文串,删去其最后一个字符一定会使其变成非回文串,因此答案为 N−1N-1N−1 ,否则答案为 NNN 。时间复杂度 O(N)O(N)O(N) 。【代码】#include<bits/stdc++.h...原创 2018-10-25 19:56:20 · 423 阅读 · 0 评论 -
【CodeForces】Mail.Ru Cup 2018 Round 1 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Elevator or Stairs?【思路要点】按照题意计算两种方式的用时,取较优的方案采纳。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5...原创 2018-10-21 14:28:31 · 929 阅读 · 1 评论 -
【省内训练2018-10-26】网友数
【思路要点】首先,当 k≥9k≥9k≥9 ,任何 ≥28≥28≥28 的数 xxx 均为网友数。 (1)(1)(1)(1)(1)(1) 的证明:当 x≤1000x≤1000x≤1000 ,我们可以暴力验证命题的正确性。否则,考虑 xxx 的末位,我们可以用 999 个 444 或是 777 造出 000 至 999 以内的任何末位,这样,我们可以在 xxx 中将造出的数减去, xxx ...原创 2018-10-26 19:25:52 · 394 阅读 · 0 评论 -
【省内训练2018-10-28】网友串
【思路要点】首先,奇数和偶数可以分开处理,最后再将答案卷积得到最终答案。预处理每一对网友数是否能够构成混沌串。我们用三元组 (i,j,s)(i,j,s)(i,j,s) 来描述一个状态,表示处理了前 iii 个数,出现了 jjj 个混沌串,并且能与集合 sss 中的串组成混沌串的字符串出现过至少 111 次。一个直观的想法是动态规划,记 dpi,j,sdp_{i,j,s}dpi,j,s...原创 2018-10-31 20:04:01 · 330 阅读 · 0 评论 -
【省内训练2019-06-03】Graph
【思路要点】首先考虑 Type=0Type=0Type=0 的做法。矩阵 AiA^iAi 的 (x,y)(x,y)(x,y) 处的元素表示从 xxx 出发走 iii 步是否能够到达 yyy 。问题即为令 xxx 为一个足够大的数,找到最小的 ddd ,使得 Ax+d=AxA^{x+d}=A^xAx+d=Ax 。定义无向图 GGG 是 kkk 分图,当且仅当可以给其中每一个点 iii 拟...原创 2019-06-06 15:25:00 · 214 阅读 · 0 评论 -
【LOJ3101】「JSOI2019」精准预测
【题目链接】点击打开链接【思路要点】显然有 2−sat2-sat2−sat 建图,注意到只有致死预测,且难兄难弟型预测存在时间先后关系,所建出的图应当不存在环。记 livei,deadilive_i,dead_ilivei,deadi 分别表示 T+1T+1T+1 时刻时表示 iii 生/死的变量。由于只有致死预测,当且仅当以下全部条件成立, Live(i,j)=1Liv...原创 2019-06-20 14:23:55 · 1644 阅读 · 0 评论 -
【校内训练2019-06-26】Z
【思路要点】首先差分序列,此时序列中至多存在 2K2K2K 个 111 。剩余的过程可以看做选定一个 111 ,并将其移动在集合 {ai}\{a_i\}{ai} 中的距离。预处理每两个 111 之间的操作距离,然后状压 dpdpdp 即可。时间复杂度 O(N×L×K+K×4K)O(N\times L\times K+K\times 4^{K})O(N×L×K+K×4K) 。【代...原创 2019-06-25 12:23:51 · 255 阅读 · 0 评论 -
【CodeForces】CodeForces Round #485 (Div. 1 + Div. 2) 题解
【比赛链接】Div. 1Div. 2【题解链接】点击打开链接【Div.2 A】Infinity Gauntlet【思路要点】按照题意模拟即可。时间复杂度\(O(NLogN)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;template <typename T> voi...原创 2018-06-05 15:43:52 · 659 阅读 · 0 评论 -
【BZOJ5336】【TJOI2018】party
【题目链接】点击打开链接【思路要点】考虑最长公共子序列的DP数组,它的每一行只有\(O(K)\)个数,并且相邻两数只差在1以内。因此,我们可以将每一行压为一个在\(2^K\)以内的二进制数。预处理每个状态的后续状态,简单DP即可。需要滚动数组,时间复杂度\(O(N*2^K)\)。【代码】#include<bits/stdc++.h>using namespace std;const...原创 2018-06-12 11:25:08 · 423 阅读 · 1 评论 -
【BZOJ3813】【UOJ38】【清华集训2014】奇数国
【题目链接】BZOJUOJ【思路要点】首先,有一个直观的做法是对每一个质因子维护一棵树状数组,记录区间中该质因子指数的和。询问时先将\(product\)质因数分解的结果求出来,再用快速幂计算欧拉函数。时间复杂度是\(O(60NLogN)\),可以在UOJ上通过,但在BZOJ上会超时。进一步考虑,由于19961993是质数,我们可以方便地计算各个质因数的乘法逆元。所以我们用一颗线段树维护区间取模乘...原创 2018-02-27 09:55:19 · 393 阅读 · 0 评论 -
【BZOJ3812】【UOJ37】【清华集训2014】主旋律
【题目链接】BZOJUOJ【思路要点】我们希望求出使得图强联通的边集数,这等价于求出所有边集数减去使得图不强连通的边集数。首先考虑一种非常暴力的做法,我们枚举最终的图缩点后的情况。那么,剩下的图必须是一个DAG,我们希望求出这张图在是DAG的情况下可行的边集数,并与每一个强连通分量加边方案数相乘,得到答案。后面的这个问题是原问题的一个子问题,递归对对应强联通分量的导出子图求解即可。问题在于求解一张...原创 2018-02-27 13:37:25 · 1318 阅读 · 0 评论 -
【BZOJ5205】【LOJ6301】「CodePlus 2018 3 月赛」白金元首与莫斯科
【题目链接】点击打开链接【思路要点】考虑从前向后、从后向前各做一次状压DP,在询问时合并信息。注意到问题等价于用\(1*2\)和\(1*1\)的棋子填满棋盘,我们可以把\(1*1\)的棋子一并在状压DP时考虑进去。合并答案时只需要枚举\(2^N\)个状态,将满足条件的DP值相乘,累加入答案即可。举例来说,在下图中,合法的状态应当满足在标号为4处已经填上棋子,在标号和为3的绿色和蓝色方格,是否填上棋...原创 2018-03-07 12:36:22 · 760 阅读 · 0 评论 -
【CodeForces662C】Binary Table
【题目链接】点击打开链接【思路要点】行的取反情况与每一列的初始元素可以看做若干个小于\(2^{N}\)的二进制数。注意到行很小,我们考虑先枚举每一行是否取反,令行的取反情况为\(Mask\)。那么,每列的二进制数\(x_i\)应当变成\(x_i\ xor\ Mask\)。令\(bits_i\)代表\(i\)的二进制表示1的个数,\(Mask\)的最小答案应当为\(\sum_{i=1}^{M}min...原创 2018-03-07 15:22:41 · 483 阅读 · 0 评论 -
【BZOJ1076】【SCOI2008】奖励关
【题目链接】点击打开链接【思路要点】补档博客,无题解(这个题也没人需要题解吧--)。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 20#define MAXK 105#define MAXP 32768int n, k;int s[MAXN];bool mark[MAXP][MAXK];doubl...原创 2018-03-07 15:27:16 · 253 阅读 · 0 评论 -
【BZOJ3814】【UOJ39】【清华集训2014】简单回路
【题目链接】BZOJUOJ【思路要点】直接进行\(Q\)次基于连通性的动态规划可以获得60分。注意到一定需要经过的边只有竖直的,而没有水平的。我们可以在完成一行的动态规划时顺便记录在第1行到第\(i\)行的区域中,第\(i\)行的插头为\(Mask\)的方案数以及第\(i\)行到第\(N\)行的区域中,第\(i\)行的插头为\(Mask\)的方案数。在询问时将经过某条边的配对的插头对应的方案数相乘...原创 2018-02-28 08:45:53 · 580 阅读 · 0 评论 -
【BZOJ5248】【2018多省省队联测】一双木棋
【题目链接】点击打开链接【思路要点】显然,任意时刻游戏棋盘的轮廓线是单调的。因此,我们可以用一个\(O(N+M)\)位的二进制数描述一个轮廓线。记忆化搜索即可,时间复杂度\(O(M*\binom{N+M}{N})\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 105;const int MAXS...原创 2018-04-09 12:40:25 · 375 阅读 · 0 评论 -
【BZOJ2595】【WC2008】游览计划
【题目链接】点击打开链接【思路要点】可以直接用基于连通性的的动态规划求解,或者可以用斯坦纳树DP+SPFA求解。时间复杂度\(O(N*M*3^K)\)。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 15#define MAXQ 2000005#define CURR 1024#define INF 1e...原创 2018-04-17 20:12:13 · 305 阅读 · 0 评论 -
【BZOJ4774】修路
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXQ 1000005#define MAXN 10005#define CURR 256#define INF 1e9struct edge {int dest, len; };vector <edg...原创 2018-04-17 20:51:32 · 431 阅读 · 0 评论 -
【BZOJ4851】【JSOI2016】位运算
【题目链接】点击打开链接【思路要点】问题要求所有数互不相同,不妨规定\(A_1<A_2<...<A_N\)。按照数位DP的思路,从高位向低位DP,记录一个\(N\)位的二进制状态,其中第\(i(i<N)\)位表示到目前为止\(A_i\)是否等于\(A_{i+1}\),第\(N\)位表示到目前为止\(A_N\)是否等于\(R\)。转移时枚举当前位所有数的取值。这个DP在0和1...原创 2018-04-12 14:54:26 · 687 阅读 · 0 评论 -
【BZOJ4006】【JLOI2015】管道连接
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXQ 1000005#define MAXN 1005#define CURR 1024#define INF 1e9struct edge {int dest, len; };vector <edg...原创 2018-04-18 14:44:20 · 230 阅读 · 0 评论 -
【BZOJ1814】Ural 1519 Formula 1
【题目链接】点击打开链接【思路要点】基于连通性的的动态规划模板题。时间复杂度\(O(3^M*N*M)\)。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 30#define TMPN 15#define HASH 1000005#define P 100003struct Hash_Table { i...原创 2018-04-19 20:28:17 · 304 阅读 · 0 评论 -
【BZOJ2331】【SCOI2011】地板
【题目链接】点击打开链接【思路要点】基于连通性的的动态规划。时间复杂度\(O(3^{Min\{R,C\}}*R*C)\)。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 105#define HASH 1000005#define P 100003#define Q 20110520struct Has...原创 2018-04-20 15:50:57 · 225 阅读 · 0 评论 -
【BZOJ1187】【HNOI2007】神奇游乐园
【题目链接】点击打开链接【思路要点】基于连通性的的动态规划。时间复杂度\(O(3^M*N*M)\)。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 105#define MAXM 7#define CURR 30005#define INF 1e9int ans[2][CURR], num[MAXM];...原创 2018-04-20 19:48:39 · 211 阅读 · 0 评论 -
【BZOJ2310】ParkII
【题目链接】点击打开链接【思路要点】基于连通性的的动态规划。时间复杂度\(O(4^N*N*M)\)。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 105#define MAXM 10#define CURR 262144#define HASH 2000005#define MOD 100003in...原创 2018-04-20 20:53:36 · 264 阅读 · 0 评论 -
【BZOJ4197】【UOJ129】【NOI2015】寿司晚宴
【题目链接】BZOJUOJ【思路要点】将每个质因数是否在两个集合中出现过状压,容易得到一个\(O(3^{Cntprime})\)的状态表示,其中\(Cntprime\)为\(N\)以内质数的个数,但这显然无法通过。我们发现任何正整数\(X\),其大于\(\sqrt{X}\)的质因数至多只有一个。我们对小于\(\sqrt{N}\)的质数进行状压,将存在大于等于\(\sqrt{N}\)的质因数的\(X...原创 2018-05-26 20:02:46 · 225 阅读 · 0 评论 -
【LOJ2252】「ZJOI2017」多项式
【题目链接】点击打开链接【思路要点】模 222 意义下,多项式平方相等于将每一项的指数翻倍。我们需要维护一些关于字符串 SSS 的信息,使得其能够进行 “指数翻倍” 和 “指数翻倍并乘以原多项式” 的操作。首先考虑测试点 6,7,86,7,86,7,8 。考虑维护字符串 SSS 中 ∣S∣−17|S|-17∣S∣−17 个长度为 181818 的字符串中,每一种字符串的个数...原创 2019-06-26 14:27:21 · 1008 阅读 · 0 评论