摘要:
题意 给出一个$n$个点$m$条边的有向图$(n,m直接的想法是对于每个点求一遍最短路,这样一共要跑n次最短路,时间复杂度$O(nmlogm)$。 考虑两个点集$S1$和$S2$之间的最短路,我们可以跑一次最短路求出来。 具体可以新建虚拟源点$s$和虚拟汇点$t$,$s$和$S1$的每个点之间连一条 阅读全文
摘要:
A.Parenthesis 括号匹配的问题有一种经典的做法。 将左括号看成1,右括号看成 1,做一遍前缀和sum。 括号序列是合法的当且仅当$sum[n]=Min(sum[1],sum[2]....sum[n])=0$时成立。 于是问题变成了交换两个括号后如何维护sum数组的值。 实际上交换a和b之 阅读全文
摘要:
C Make a Rectangle 从大到小贪心即可。 D Coloring Dominoes 就是个乘法原理。 cpp include using namespace std; const int N=200005; int vis[26]; char s[N]; struct Node{int 阅读全文
摘要:
A. H国的身份证号码I dfs裸题。 时间复杂度$O(n^k)$。 B.合并子目录 以 $/$为分隔符,对所有的文件夹进行hash后存入map,给每个文件夹的hash值分配一个id。 以这些id和文件夹的从属关系建树,那么只要$size[i]=1$就表示这个文件夹i可以和它的子文件夹合并。 时间复 阅读全文
摘要:
题意: 给你一个R C的棋盘,棋盘上的棋子会攻击,一个棋子会覆盖它所在的行,它所在的列,和它所在的从左上到右下的对角线,那么问这个棋盘上没有被覆盖的棋盘格子数。数据范围R,C,N include include include include include include include incl 阅读全文
摘要:
# include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <vector> # include <queue> # include <stack> # include <map> 阅读全文
摘要:
给定一个序列,初始为空。现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置。每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 由于序列是顺序插入的,所以当前插入的数字对之前的数字形成的最长上升子序列没有任何影响,所以只需要计算出当前的这个数字结尾的上升子序列长度。 由于 阅读全文
摘要:
飞飞国是一个N×M的矩形方阵,每个格子代表一个街区。然而飞飞国是没有交通工具的。飞飞侠完全靠地面的弹射装置来移动。每个街区都装有弹射装置。使用弹射装置是需要支付一定费用的。而且每个弹射装置都有自己的弹射能力。我们设第i行第j列的弹射装置有Aij的费用和Bij的弹射能力。并规定有相邻边的格子间距离是1 阅读全文
摘要:
给出一个n排列,每次可以选择相邻的两个数字放在新的排列首部,问最后形成的新的排列字典序最小是? 考虑新排列的第一个数字,则应是下标为奇数的最小数,下标不妨设为i。第二个数字应该下标大于i且为偶数的最小数,不妨设为j。 那么这样就将[1,n]新分割成了三个区间[1,i-1],[i+1,j-1],[j+ 阅读全文
摘要:
一个无向连通图,顶点从1编号到N,边从1编号到M。 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和。 现在,请你对这M条边进行编号,使得小 阅读全文