Icefox的博客

生活不止眼前的苟且,还有诗和远方。

CF547D Mike and Fish(欧拉图)

考虑行列建点,每个点变成边。 如果是欧拉图,那么每个点的入边=出边,考虑每一个行点,把入边都染成r,出边都染成b那么就一样多了。 但是有可能一开始不是个欧拉图,我们可以对度数为奇数的点两两配对(一定有偶数个),然后就一定是个欧拉图了。跑无向图输出欧拉回路即可。 复杂度O(n)O(n)O(n)...

2018-07-12 14:41:02

阅读数:42

评论数:0

CF367E Sereja and Intervals(dp,计数)

因为不能包含,所以一定没有相同的区间,我们可以先不考虑顺序,求出可能的方案数,然后乘上n!就是答案。 我们考虑按1~m的顺序枚举每一个数,由于不能包含,所以一个数上最多一个左区间和最多一个右区间,我们直接枚举这4种情况即可。因此f[i][j][k]f[i][j][k]f[i][j][k],表示考...

2018-07-12 14:05:40

阅读数:31

评论数:0

CF453E Little Pony and Lord Tirek(线段树+二分)

考虑如果一个区间在同一时刻被清过零,怎么做。 我们可以把这个区间中的点按生成满能量的时间从小到大排序,然后用生长了的时间去二分。一定是前面一段都是满能量,可以前缀和算,后面一段也可以r的后缀和×生长时间算。 我们线段树维护一下这个东西。 如果区间内有未清过零的点打标记-2. 如果一个区间被...

2018-07-09 22:38:30

阅读数:50

评论数:0

Codeforces Round#495

A #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 100010 inline ...

2018-07-06 23:57:01

阅读数:40

评论数:0

CF392E Deleting Substrings(区间dp)

题意就是说给你一个序列a,你每次可以选择一段“山峰形”子串删掉,获得v[长度]的价值,价值可能为负。可以不全删掉,求最大价值。 f[i][j] 把i~j都删掉的最大价值 g[i][j] 把i~j删成a[i],a[i]+1,…,a[j]的形式的最大价值 h[i][j] 把i~j删成a[i],a...

2018-06-26 19:46:41

阅读数:37

评论数:0

CF607B Zuma(区间dp)

给定一个序列,每次操作可以选择一个回文子串删掉,问把整个序列删除所需的最小操作次数。我们区间dp,f[i][j]表示把i~j都删掉的最小花费 转移有两种: 1、i,j没有在一次被删掉,f[i][j]=f[i][k]+f[k+1][j] 2、a[i]==a[j],i,j在一次被删掉,那么在删i...

2018-06-25 20:48:49

阅读数:34

评论数:0

CF346B Lucky Common Subsequence(LCS+kmp)

给定三个串A,B,C,求串A,B的lcs,要求不能包含C串作为子串。 f[i][j][k]表示A串前i个,B串前j个,lcs匹配到了C串的第K的个字母的lcs 转移和普通的lcs差不多,就是在往lcs上多加一个字符时,需要求一下新的lcs匹配到了C的那个字符,我们kmp预处理一下next数组即...

2018-06-25 20:33:50

阅读数:30

评论数:0

CF403D Beautiful Pairs of Numbers(计数,dp+组合数学)

首先做一个dp f[i][j]f[i][j]f[i][j]表示区间总长度为i,有j个区间,且任意两个区间的长度不同的方案数。两种转移:1、每个区间的长度都增加1,f[i][j]−>f[i+j][j]f[i][j]−>f[i+j][j]f[i][j]-&...

2018-06-23 21:14:08

阅读数:54

评论数:0

CF354C Vasya and Beautiful Arrays(gcd+暴力)

首先gcd最大是原序列最小数,设为m。 如果K>=m-1那么一定都可以变成m的倍数,因此答案就是m 显然答案最小为K+1,因为一定能把所有数都变成K+1的倍数。 于是我们可以在K+1~mn从大到小枚举,数x如果是答案的话,要求每一个数都在[gx,gx+K]之间。我们前缀...

2018-06-23 13:01:38

阅读数:34

评论数:0

CF750E New Year and Old Subsequence(dp+线段树分治+矩阵)

我们考虑5种状态的矩阵: 0–什么都没出现 1–出现了2 2–出现了20 3–出现了201 4–出现了2017 重定义 加法为取min,乘法为 加,每个点根据字符可以得到一个初始矩阵 那么答案就是l~r的矩阵的乘积。因为矩阵乘法满足结合律,因此我们可以用线段树分治来快速求区间矩阵乘...

2018-06-17 23:57:16

阅读数:75

评论数:0

CF962F Simple Cycles Edges(图论+tarjan求点双)

给定一张无向图,求哪些边只在一个简单环中。 我们搞出点双,然后对于一个点双,如果边数=点数,说明这个点双就是一个简单环,它的所有边都满足条件。否则一定都不满足条件。 为什么不是边双呢?因为你看两个环,如果只有一个公共顶点,那么他的点数≠≠\not=边数,但是所有边都符合要求。也就是一个边双中可...

2018-06-01 20:54:03

阅读数:57

评论数:0

CF986C AND Graph(按位+图论)

给定一个大小为m的集合,每一个数都是0 ~ 2n−12n−12^n-1的,如果两个数x,y满足x&y==0就连一条无向边,问这m个数连成的图有多少个连通块。 考虑x&y==0,那么x一定是~y的子集。于是枚举并查集维护连通性即可。 然而复杂度很要...

2018-05-31 11:04:42

阅读数:167

评论数:0

Codeforces Round#485

CF986A Fair(贪心+最短路) CF986B Petr and Permutations(BIT+排列性质) A #include <bits/stdc++.h> using namespace std; #define ll long...

2018-05-31 10:14:09

阅读数:78

评论数:0

CF858D Polycarp's phone book(贪心+字符串)

贪心地瞎排序一波就好了qaq 填补很久以前的坑qaq #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define ...

2018-05-30 23:23:06

阅读数:37

评论数:0

CF981F Round Marriage(二分答案+Hall定理)

二分答案以后就是看是否存在完美匹配。 然而直接建图肯定是gg 我们猜这个hall定理只需要区间满足即可! 如果是一条线的话那直接枚举过去就好了… 但它偏偏是一个环!然后我就gg了,各种瞎搞未果。 正确做法是把这个环拆成链qaq 把所有的点b复制一遍接在后面。 把所有的点b复制一遍接在...

2018-05-29 23:12:02

阅读数:170

评论数:0

Codeforces Avito Code Challenge 2018

CF981A Antipalindrome(字符串+模拟) #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #def...

2018-05-28 10:59:30

阅读数:44

评论数:0

CF963B Destruction of a Tree(树+构造)

给定一棵树,每次删掉一个偶数度数的点及他的边,问能否把这棵树全删掉。 可以证明偶数个点的树一定不行。(每次一定是删掉偶数条边,而偶数个点的树有奇数条边。) 奇数个点的树一定可以。为啥呢,你只要会证就好啦。 证明具体参见Visjiao 博客:portal #include &...

2018-05-23 10:23:40

阅读数:58

评论数:0

CF739E Gosha is hunting(期望dp+wqs二分)

首先我们有朴素dp,f[i][a][b]表示对于前i个小精灵用a个a球,b个b球可以获得的最大期望值。 枚举第i个小精灵的方式转移即可。O(n3)O(n3)O(n^3) 考虑优化这个dp,我们发现这个问题好像还可以费用流…诶,他好像是凸的…诶…wqs二分! 好像两维都可以wqs二分呢!orz...

2018-05-16 10:45:21

阅读数:93

评论数:0

CF976F Minimal k-covering(网络流)

对于K-covering 我们建图:原图的边i->n1+j,容量为1.S->左边的点i,容量为du[i]-K,右边的点j->T,容量为du[j]-K。跑最大流。m-最大流就是答案。没流量的边就是还在的边。我们考虑从大到小枚举K,就可以每次直接在残余网络上给每个点新加1的流量,直...

2018-05-02 21:46:46

阅读数:41

评论数:0

CF633G Yash And Trees(线段树+bitset)

首先我们用dfs序把子树转化成区间,我们就是要维护区间加法和区间%m不同质数的个数。 因为m只有1000,我们直接暴力的每个节点维护一个大小为1000的bitset即可。 bitset的一位只占1bit,因此内存为1000/8字节。所以空间复杂度就是O(4n∗1000/8)O(4n*1000/...

2018-04-19 08:53:32

阅读数:33

评论数:0

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