自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 Codeforces 842 D Vitya and Strange Lesson 线段树

传送门:Codeforces 842D题意:给出一个长度为n的序列和m次操作,每次操作将序列中所有数异或上给定的数x,然后求序列的mex。mex:给定序列中未出现的最小的非负数。思路:首先不要被题目中说的每次序列都会变化迷惑,因为异或满足结合律,因此我们只要把所有的x异或起来,就相当于对原序列和一个x求题目中的要求,假设原序列为a[i],和x异或以后得到b[i],我们要求mex(b[i

2017-08-30 18:03:33 363

原创 HDU - 5724 Chess 博弈(sg函数)

传送门:HDU 5724题意:n×20的棋盘内放置了一些棋子,每颗棋子走到向右的最近的空格(可以跳过其他棋子)为一次操作,Alice先手,问谁会赢。思路:由于每行长度只有20,因此我们可以状压预处理出所有状态的sg函数,然后对输入的每一行的状态的sg值异或起来就好了。代码:#includeusing namespace std;bool vis[22];int sg[1 <<

2017-08-28 21:21:25 278

原创 51nod 1524 可除图的最大团 dp

传送门:51nod1524题意:中文题。思路:我竟然还想建图搞。。正解:设dp[i]代表以i为最小点权的最大团的大小,根据最大团及可除图的性质容易得到转移方程:dp[i] = max(dp[j] + 1) 其中 i | j。代码:#include#include#define ll long long#define inf 0x3f3f3f3fusing names

2017-08-28 18:10:37 252

原创 51nod 1564 && 1674 区间的价值(V2) 数列分治

传送门:51nod 1674题意:中文题。思路:首先要知道的一点是,对于一段数列进行连续的或操作,得出来的结果是单调不减的,进行与操作的出来的结果是单调不增的,并且由于这个题数据范围只有1e9,因此或(与)操作的出来的不同的结果最多只有30(30)个。知道了这一点,我们就可以对数列进行分治计算了,每次将右半边与(或)操作得到的不同值及其个数计算出来,然后枚举左半边的结果,计算出对答案的

2017-08-27 22:01:20 366

原创 51nod 1603 限高二叉排列树 计数dp

传送门:51nod1603题意:求有n个节点且高度不低于h的二叉树有多少种形态。思路:dp[n][h]表示有n个节点且高度拓展:一个n个节点的二叉树的所有形态数就是卡特兰数。卡特兰数应用。代码:#include#define ll long long#define inf 0x3f3f3f3fusing namespace std;typedef pair P;con

2017-08-25 23:20:56 217 2

原创 51nod 1737 配对 树的重心

传送门:51nod1737题意:中文题。思路:画图可以得知对于每一条边,它对答案的贡献一定不超过它两端子树的大小的较小值,并且使答案最大的每条路径都应该是经过重心的,因此题目可以转化为求所有点到重心的权值和。(直接按发现的规律求也可以)。代码:#include#include#define ll long long#define inf 0x3f3f3f3fusing na

2017-08-25 20:41:03 211

原创 51nod 1675 序列变换 莫比乌斯反演(第二种形式)

传送门:51nod 1675题意:中文题。思路:明明很像多校的一个题,还是简化版,而我愣是没想起来用莫比乌斯反演。。这题用的是莫比乌斯反演的第二种转化形式:设f[i]为最大公因数为i时的计数F[i]为公因数包含i的时候的计数显然满足第一个式子,因此我们就可以转化成二个式子求出f[1].代码:#include#include#define MAXN 100

2017-08-25 13:47:00 446

原创 HDU 6171 Admiral 双向搜索(meet in the middle) + 哈希

传送门:HDU6171题意:给你一个高度为6的数塔,问最少多少步能走成如下状态。每次只能将值为0的点与其左上方,上方,下方,右下方四个方向的一个点进行交换。 0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5大于20步可以直接输出“too difficult”思路:比赛的时候智障的想了一个多少小时的A* 和 IDA* ,还

2017-08-24 21:54:23 809 5

原创 51nod 1821 最优集合 并查集 || 栈

传送门:51nod 1821题意:中文题。思路:要做这题需要知道一个前提:假设目前集合优美值为now,那么加入一个x(x剩下的就是贪心从b集合里取尽量大的k个数了,每次a集合中的数无法使now继续增大时,就从b集合中取一个尽量大的数,因为每个数只能取一次,取走就相当于没了,因此我们可以用并查集维护下标之间的相邻关系,这也算是经典运用了吧。另外还可以用栈处理贪心的过程:维护一个栈,将

2017-08-23 21:13:22 213

原创 HDU 6166 Senior Pan spfa(顶点集间最短路)

传送门:HDU6166题意:给出一个有向图,并给出一个点集,请求出集合中的点任意两两之间的最短距离中最小的那个。思路:当时xjb写了一发二分 + 爆搜,果不其然TLE。。正解:戳这里戳这里按照二进制位分组的思路真的是很巧妙啊。代码:#include#define ll long long#define inf 0x3f3f3f3fusing namespace std

2017-08-23 20:15:48 252

原创 HDU 6155 Subsequence Count dp + 矩阵+ 线段树

传送门:HDU6155 题意:给出一个长度为n的01串和两种操作: 1.将区间[L, R]翻转(0变1,1变0) 2.计算区间[L, R]的不同的子序列的个数 思路:一开始以为算子串数量,对着题解怼了半天没看懂。。 叉姐的题解: 来自:ICPCCamp 里面帖子的回复中有对转移方程为什么不会重复计数的解释。然后就是如何用线段树去维护:详细讲解 但是我看了很多的博客都没有讲解为什么

2017-08-23 20:06:46 267

原创 HDU 6136 Death Podracing 优先队列 + 循环链表(模拟)

传送门:HDU6136题意:n个人在圆形上运动,他们都有一定的速度和初始位置,当两个人相遇的时候编号较小的就会出局,当场上剩下最后一个人的时候游戏结束,问多长时间游戏会结束。思路:官方题解:我用的是解法一。代码:#include#define ll long long#define inf 0x3f3f3f3fusing namespace std;ty

2017-08-22 21:07:23 399

原创 HDU 6133 Army Formations 树状数组 + 启发式合并

传送门:HDU6133题意:给你一棵n个节点的二叉树,每个节点要提交一个任务,需要花费一定的时间,每个节点都要提交这个节点和其子树所有的任务,从0时刻开始提交任务,每个任务提交时的罚时定义为该任务提交的时刻 + 该任务提交所需的时间。求每个节点提交完所有任务的最小罚时。思路:首先结合样例我们可以将题意转化为: 对于每个节点,将其子树上所有点按权值从小到大排序,则所求结果为∑val[i] *

2017-08-21 21:52:38 558

原创 CodeForces - 841D Leha and another game about graph 构造(dfs + 思维)

传送门:Codeforces 841D题意:给出一个连通图,并给每个点赋一个d值0或1或-1,要求选出一个边的集合,使得所有的点i要么d[i] == -1,要么dgree[i] % 2 == d[i],dgree[i]代表i结点的度数。思路:首先我们考虑一条边都不选的情况,此时所有d[i] == 0的i都满足了题目要求,此时如果有d[i] == 1的点,我们就要加一条边,我们考虑用df

2017-08-20 21:48:48 1029

原创 HDU 6150 Vertex Cover 构造

传送门:HDU6150以上来自:点击打开链接想了很久都不明白贪心的做法为什么一定把右边的当做解,重新看了一眼题,发现if (deg[i] >= mx) {   mx = deg[i]; u = i; }注意是>=,也就是说,度数相等的情况下选择较大的编号,而我们构造的图中右边的编号又一定大于左边的。。这样做

2017-08-20 18:39:36 261

原创 HDU 6134 Battlestation Operational 莫比乌斯反演 + 数学推导

传送门:HDU 6134题意:给定n,求:思路:以上转自:点击打开链接上面的推导过程中最重要也是最不好理解的就是‘重要发现’那里,我们可以举个例子解释,假设n = 12那么等式右边就为(12/1 + 12/2 + 12/ 3 + 12/ 4 + 12/5 + 12/6 + 12/7 + 12/8 + 12/9 + 12/10 + 12/11 + 12/12)然后

2017-08-20 16:50:24 465

原创 HDU 6138 Fleet of the Eternal Throne AC自动机||后缀数组

传送门:HDU6138题意:给出n个串和q次询问,每次询问给出x和y,表示输入的第x个和第y个串,要求找出一个最长的子串p,满足:p是x的子串,p是y的子串,且p是这n个串中某一个(可以是多个)的前缀,问p的最大长度是多少。思路:看官方题解还很麻烦的样子,不过看dalao们的思路一下就懂了。。将所有串插入到AC自动机里去,然后对于每个询问,先在AC自动机上查询x串,并对每一个经过的节点

2017-08-17 21:55:35 237

原创 51nod 1799 二分答案 思维 + 分块打表

传送门:51nod 1799题意:中文题。思路:先弄懂题目要求,其实要求的就是n!种排列中二分到最后使得r == k 的数目。然后明确知道了二分的结果位置k,那么二分的过程就是确定的,而影响二分的只有二分过程中mid位置的数相对于m的大小。因此我们先模拟对原序列做一次二分,记录二分过程中mid位置上应该有多少个大于m的,多少个小于等于m的,分别假设有x个和y个的话,那么最终答案就是

2017-08-16 20:23:24 225

原创 POJ - 1486 Sorting Slides 二分图最大匹配(求关键边)

传送门:POJ1486题意:给出一些重叠的矩形,按照给出的顺序分别编号为A、B、C。。然后再给出一些点,根据给出的顺序分别编号为1,2,3。。。问能否确定某个点一定在某个矩形上(每个矩形上都有且只有一个点)。思路:很容易看出是一个二分图完备匹配问题,关键是如何确定某个点是否只能在一个矩形上,即寻找二分图中匹配是唯一的点。解决的方法是先做一次最大匹配,然后枚举删除匹配中的每条边,如果删除

2017-08-16 15:41:26 455

原创 HDU 6126 Give out candies 最小割

传送门:HDU6126题意:有nn个小朋友,标号为11到nn,你要给每个小朋友至少11个且至多mm个的糖果。小朋友们共提出kk个要求,每个要求包括三个整数x,y,zx,y,z,表示xx号小朋友得到的糖果数减去yy号小朋友得到的糖果数,结果应当不大于zz。如果你给ii号小朋友jj颗糖果,他会获得w_{i,j}w​i,j​​的满意度,你需要最大化所有小朋友的满意度之和。1\leq n,m\le

2017-08-16 00:34:01 340

原创 CodeForces - 839E Mother of Dragons 最大团(Bron–Kerbosch算法)

传送门:Codeforces 839E题意:给出一个图的邻接矩阵,要求给每个点赋值,使得点权和为K,并定义每条边权值为两端点点权的乘积,要求最大化边的权值和。思路:最大化边权就是要将k均分给图中的最大团中的点。证明见:http://blog.csdn.net/hzoi_ztx/article/details/77151474http://www.cnblogs.com/FxxL/p

2017-08-15 20:36:01 687

原创 Codeforces 839 D. Winter is here 容斥

传送门:Codeforces 839D题意:给出一个序列,求取出一个字序列,当他们的GCD大于1时,将贡献子序列所有数的gcd * 子序列的长度,问总贡献是多少。思路:感觉很像前几次的多校一个题,但是想了很久也没想出来该怎么求∑i∗C(n, i)(i >= 1)然而,其实∑i∗C(n, i) == n * ∑ C(n - 1, i - 1)(i >= 0),化成组合数的定义式立马就能看

2017-08-14 21:38:35 570

原创 Codeforces 839B Game of the Rows 贪心

传送门:Codeforces 839B题意:有k个小队坐飞机,每个小队有a[i]人,飞机上有n排座位,每排座位有8个,定义同一排中{1, 2}, {3, 4}, {4, 5}, {5, 6} or {7, 8}.   几个座位是相邻的,问能否保证相邻的座位中没有两个不同的队伍的人。思路:先贪心的使用3、4、5、6四个座位,然后再用两边的,我是用优先队列维护的这一过程,比赛的时候傻X的一

2017-08-14 17:54:12 282

原创 HDU 6096 String AC自动机(多种解法)

传送门:HDU6096题意:给出n个字符串和q个询问,每次询问给出两个串 p 和 s 。要求统计所有字符串中前缀为 p 且后缀为 s (不可重叠)的字符串的数量。思路:从dalao哪里学来的巧妙的解法:首先是要离线处理。将询问做成s + ‘#’ + p的模式串插入到AC自动机里,并记录插入的结点位置,然后将每一个原串str做成str + ‘#’ + str的主串,用AC自动机进行匹

2017-08-14 16:57:17 1377

原创 51nod 1299 监狱逃离 树形DP

传送门:51nod 1299题意:中文题。思路://dp[i]表示警察全部放置完成后i节点的状态 //0 表示逃犯不能到达i节点并且i节点能(经由其子树)到达出口(不经过警察的情况下)//1 表示逃犯不能到达i节点并且i节点不能(经由其子树)到达出口(不经过警察的情况下)//2 表示逃犯能到达i节点并且i节点不能(经由其子树)到达出口(不经过警察的情况下) 容易得知

2017-08-14 00:01:21 317

原创 2017 百度之星 初赛B轮 HDU6114 HDU6118 HDU6119

先吐槽一下,百毒之星真不愧为百毒之星啊,这次初赛B轮1002 神TM(1e5)^3也能在10s内跑过,这TM是量子服务器吧,还有资格赛各种数据+题面问题,无力吐槽了都。传送门:HDU6114题意:中文题。思路:仔细分析一下就是求C(n,m),比赛的时候因为数据量小不想处理逆元xjb写了半天都不对,最后还是从博客里扒了个lucas的板子交了。代码:#include#de

2017-08-13 18:56:25 840

原创 POJ - 3411 Paid Roads 状压DP || dfs

传送门:POJ3411题意:N个城市间有m条单向路,分别从a到b,可以在c处交P路费,也可以到b处交R路费。问从1到n的最少花费是多少。思路:状压DP, dp[s][i]表示经过的城市集合状态为s,且当前在i号城市的最少花费。注意由于原图有可能有环路,因此某个点可能经过不止一次,因此在状态转移的过程中有类似于dijkstra中的松弛操作,即对某一个状态不断更新。  这题另外的解法是

2017-08-10 23:23:17 325

原创 HDU 6103 Kirinriki 枚举中间点(思维)+ 尺取

传送门:HDU6103题意:定义两个长度为n的字符串的距离为: disA,B=∑i=0n−1|Ai−Bn−1−i|  问给定字符串中, 满足 dis 两个不重叠子串的最大长度是多少。思路:先上官方题解:标题提示我们回文串。两个不重合的子串向中心一起延长会形成奇偶长度两种合串。枚举一下中心向外延伸,如果和超过了阈值弹掉中心处的位置。双指针维护。时间

2017-08-10 20:37:16 362

原创 HDU 6105 Gameia 博弈(思维)

传送门:HDU6105题意:给出一棵树,Alice 和 Bob 轮流操作, Alice先手, Alice的操作是选一个未染色的点将其染成白色,Bob的操作是选一个未染色的点将其染成黑色,并且和这个点有直连边的点也被强制染成黑色(无论这些直连点之前是否有颜色),Bob还有一个小技能是去掉一条边,最后当所有点都有颜色的时候,如果有白色点则Alice赢,否则Bob赢。思路:1.如果Bob能把

2017-08-10 19:02:15 1011

原创 POJ - 1795 DNA Laboratory 状压DP + dfs

传送门:POJ1795题意: 给出n个字符串,问包含这n个字符串的最短的总串字典序最小是多少。思路:思路来自:http://blog.csdn.net/qq_29169749/article/details/54755026dp[i][s]:=在所有字符串选取情况为s的状态下,最前面的字符串为i号字符串的最小长度。依次枚举下一个字符串可得状态转移方程 dp[i][s | 1 c

2017-08-09 23:44:35 345

原创 POJ - 2836 Rectangular Covering 预处理 + 状压DP

传送门:POJ2836题意:坐标平面上有n各点,用任意大小(非零)的矩形覆盖它们,每个矩形至少覆盖两个点,矩形边长为正整数,求最少所需要的矩形的总面积。思路:先将平面上任意两个点组成的矩形预处理出来,并将每个矩形内部包含的点的状态压成一个整数,然后进行dp,dp[s]表示覆盖的点集状态为s的最小面积,枚举每个预处理出来的矩形进行转移就好了。代码:#include#include

2017-08-09 23:35:34 308

原创 HDU 6085 Rikka with Candies 模拟bitset

传送门:HDU6085题意:给出A和B两个数组,以及q个查询, 每次给出一个k,询问有多少对(i,j), 使得Ai % Bj = k, 输出对数对模2的值思路:先贴上官方题解:考虑预处理出所有 kk 的答案,问题相当于一个模 22 意义下的 \text{mod}mod 卷积,即给出数组 A,BA,B,将 A_i \times B_jA​i​​×B​j​​ 累加到 w_{i\ \

2017-08-09 21:28:36 240

原创 POJ 2441 Arrange the Bulls && POJ 3254 Corn Fields 状压DP入门

传送门:POJ2441题意:将n头牛分到m个牛栏里,每头牛都有自己喜欢的牛栏,每个牛栏只能放一头牛,问共有多少种分配方案。思路:由于n和m都很小,状压搞一搞就好了,dp[i]表示m个牛栏的状态为i的分配方案(将i转化为2进制,1表示有牛,0表示没有牛)__builtin_popcount(k)返回k的二进制中有多少个1代码:#include#include#include

2017-08-07 23:57:31 211

原创 POJ - 1201 Intervals 差分约束 || 贪心 + 线段树

传送门:POJ 1201题意:给出n个三元组(ai, bi, ci),找出一组元素数目最少的整数集合,使得集合中包含在[ai, bi]之间的数不少于ci个。思路:设d[i]表示[0..i]区间内选中了几个整数,则题给条件可以转化为d[bi] - d[ai - 1] >= ci,并且由于d[i]是一个前缀和函数,还满足 0  代码:#include#include#include#

2017-08-07 20:04:56 269

原创 UVA - 11990 "Dynamic'' Inversion 树状数组套BST || 分块

传送门:UVA - 11990题意:给出一个1到n的全排列A[i],并给出m个删除操作,问删除每一个数前序列中有几对逆序对。思路:我写的方法来自:点击打开链接很容易想到删除一个数以后,减少的逆序对来自在它前面比它大的数,和在它后面比它小的数,暴力找这两种数的话显然是不行的,找比一个数大(小)的数可以用BST(二叉搜索树)去维护,但是我们怎么维护这些数在位置上的先后关系呢,考虑使用树状数

2017-08-07 19:45:15 236

原创 HDU 5952 Counting Cliques dfs + 思维

传送门:HDU5952题意:给出一个无向图,问其中点集大小为S的无向完全子图的个数。思路:就是暴搜,但是建图有技巧,因为搜索过程中很容易出现重复序列,比如我们第一次搜到的答案是1 2 3,下一次搜到的是1 3 2,这两个实际上是同一种子图,搜索这些无用状态既浪费时间,去重还很麻烦。技巧就是建图的时候建成有向图,只让标号小的顶点指向标号大的顶点,这样搜出来的序列一定是一个 v1 代码:

2017-08-06 21:25:59 267

原创 HDU 6059 Kanade's trio Trie + 计数

传送门:HDU6059题意:给定一个序列a,求有多少个三元组(i,j,k) 满足1思路:利用字典树维护前 k-1 个数。当前处理第 k 个数。显然对于 k 与 i 的最高不相同位 kp 与 ip :当 ip=0 , kp=1 时,该最高不相同位之前的 ihigher=khigher 。则 jhigher 可以为任意数,均不对 i, k 更高位(指最高不相同位

2017-08-06 15:11:31 257

原创 HDU 6078 Wavel Sequence 计数dp(思维)

传送门:HDU6078题意:给出两个序列A和B,让你找出两组等长下标序列f和g,使得对于每个i,Afi == Bgi ,并且Afi序列为波浪序列。  问能找出多少种这样的下标序列。波浪序列定义: a1a2>a3a4>a5a6 a1 a3 a5 思路:先贴上官方题解:设f_{i,j,k}f​i,j,k​​表示仅考虑a[1..i]a[1..i]与b[

2017-08-05 18:10:51 275

原创 HDU 6071 Lazy Running 同余 + 最短路

传送门:HDU6071题意:给你一个由四个节点组成的环,相邻两点间可达,求从节点2出发,回到节点2的不小于k的最短路径的长度。思路:先摆上官方题解:​​取w=\min(d_{1,2},d_{2,3})w=min(d​1,2​​,d​2,3​​),那么对于每一种方案,均可以通过往返跑ww这条边使得距离增加2w2w。也就是说,如果存在距离为kk的方案,那么必然存在距离为

2017-08-05 15:59:40 734

原创 HDU 6073 Matching In Multiplication 思维(拓扑)

传送门:HDU6073题意:给出一个二分图的两个顶点集合,每个顶点集合的大小为n,输入v1,w1,v2,w2,表示集合U中的i顶点与集合V中的v1,v2顶点相连,且边的权值为w1,w2。求两个集合的所有完备匹配的权值之和。一个完备匹配的权值为该匹配所有边的权值相乘,且数据保证至少存在一个完美匹配。思路:官方题解说的很明白了:首先如果一个点的度数为11,那么它的匹配方案是固定的,

2017-08-04 23:27:41 370

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除