05 2020 档案
摘要:匈牙利算法 #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <queue> using namespace std; #define ll long long #define pb
阅读全文
摘要:ROADS 思路:K = 10000,dijkstra复杂度O(nlogn),如果我们把不同点的不同花费拆点,即d[花费][点] = 距离,则被拆为 N*K个点,分成K层,则dijkstra复杂度O(k * (n *logn + m)),复杂度在超时边缘徘徊... #include <iostrea
阅读全文
摘要:拯救大兵瑞恩 思路:钥匙种类p = 10,我们可以拥有不同种类钥匙,通过这个我们可以把图分成2^p层,表示拥有不同种类钥匙的情况。 #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include
阅读全文
摘要:Equidistant 思路:我们首先可以想到,如果存在点x使得其他队伍到达这个城市距离相同,可以看作一个四面八方往上走楼梯的方式,通过走楼梯,他们慢慢汇聚到一起,直到汇聚到x点,则我们可以通过bfs来进行分层,从队伍点出发bfs,之后我们只需要模拟汇聚的方式,当然,我们只能走上一层的点,不能退,不
阅读全文
摘要:双调路径 思路:我们可以容易想到,通过不同的边到达某个点的时间和金钱是不一样的,这是难点。我们发现点数n = 100,权值t,c = 100,如果我们分别维护时间权值为x时,到达该城市的最少金钱是多少,即d[城市][时间] = 金钱,因为 n = 100, t,c = 100,说明我们需要维护 n*
阅读全文
摘要:Manacher(马拉车) 1 #include<iostream> 2 #include<string.h> 3 #include<algorithm> 4 #include <cstdio> 5 using namespace std; 6 7 const int N = 1e7 + 1e6 +
阅读全文
摘要:SPFA #include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <queue> using namespace std; #define ll long long #define p
阅读全文
摘要:Bellman-ford #include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; #define ll long long #define pb push_ba
阅读全文
摘要:Ponk Warshall 思路:容易想到如果存在 "AG" "GA"这种,那一定是先交换这些,可以一次交换解决两个位置,如果不存在前面的情况,我们需要找到类似"AG","GT"这种斜对角能抵消的,得到"AT"然后我们需要马上去找有无"AT","TA"这种情况的。 我们知道"ATCG"只会出现16种
阅读全文
摘要:G. Pot!! 思路:区间维护线段树即可,由题意可知我们只需要区间维护cnt[2, 3, 5, 7]个数的最大值即可。 1 #include <cstdio> 2 #include <iostream> 3 #include <cstdio> 4 #include <algorithm> 5 #i
阅读全文
摘要:Garland 1 #include <cstdio> 2 #include <iostream> 3 #include <cstdio> 4 #include <algorithm> 5 #include <functional> 6 #include <set> 7 #include <vect
阅读全文
摘要:Just Eat It! 思路:最大连续子段和:判断前缀和是否大于0,如果大于0对后面有贡献,否则置0. #include <cstdio> #include <iostream> #include <cstdio> #include <algorithm> #include <functional
阅读全文
摘要:Dr. Evil Underscores 思路:对每位二进制进行判断,如果当前位的二进制都为0或者1,则这个位对答案贡献为0,如果当前为有0有1则这个位对答案贡献(1 << bit),然后对当前位为0和为1的分成两个集合进行分治,所有答案取min。 1 #include <cstdio> 2 #in
阅读全文
摘要:Minimax Problem 思路:我们通过二分去试探答案,假设答案是x,则我们把数组中大于等于key的标记为1,反之标为0。我们知道m = 8,则01串的情况只有2^8-1种,那么我们可以把n行的情况压缩在vis[2^8-1]长度的数组中,vis记录符合的下标,如果(!vis[x] && !vi
阅读全文
摘要:Nastya and Scoreboard 思路:先确定每个位置上变成0~9需要额外点亮多少灯,因为需要用完k个灯,可以有前导零,我们从最后一位开始点亮灯,往前递推可行的方案。dp[当前位置][用了j个灯] = (可行,不可行)。 然后就判断能不能用完k个灯,可以得话从前往后以9~0顺序寻找最大数字
阅读全文