problem1 link 直接模拟即可. import java.util.*; import java.math.*; import static java.lang.Math.*; public class Multifactorial { public String calcMultiFact(int n, int k) { long result=1; final long nlimit=1000000000000000000l; while(true) { if(result>nli…
problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x)=\sum_{i=1}^{x}g(i)$,那么答案为$h(R)-h(L-1)$.对于$h(x)$: (1)如果$x\leq K$,那么$h(x)=0$ (2)否则对于$[K+1,x]$之间的所有偶数来说,对答案的贡献为$even+h(\frac{x}{2})-h(\frac{K}{2})$,其中$e…
Problem Statement You are given the ints perimeter and area. Your task is to find a triangle with the following properties: The coordinates of each vertex are integers between 0 and 3000, inclusive. The perimeter of the triangle must be exactly…
Problem Statement The Happy Letter game is played as follows: At the beginning, several players enter the field. Each player has a lowercase English letter on their back. The game is played in turns. In each turn, you select two players with dif…
problem1 link 首先使用两个端点颜色不同的边进行连通.答案是$n-1-m$.其中$m$是联通分量的个数. problem2 link 首先构造一个最小割的模型.左边的$n_{1}$个点与源点相连,右边的$n_{2}$个点与汇点相连.每个中间点最少有$d+1$条边(有一条到汇点/源点的边).最小割为$ans$. 假设有$x$个割边出现在源点和$n_{1}$之间,那么$y=ans-x$个出现在$n_{2}$和汇点之间.其中$x,y$应该满足的关系为$0\leq y=ans-x \leq…
problem1 link 首先枚举长度$L$.然后计算每一段长度$L$的差值最大公约数,然后差值除以最大公约数的结果可以作为当前段的关键字.然后不同段就可以比较他们的关键字,一样就是可以转化的. problem2 link 对于那些一定要换的,把它们的places和cutoff拿出来,排个序.设它们为$p_{1},p_{2},..,p_{k},c_{1},c_{2},..,c_{k},$.最优的策略一定是从小到大挨个匹配. 如果到了某个位置不能匹配,比如$t$.那么需要从那些不需要交换的组里面…
problem1 link 首先计算任意两点的距离.然后枚举选出的集合中的两个点,判断其他点是否可以即可. problem2 link 假设字符串为$s$,长度为$n$.那么对于$SA$中的两个排名$SA_{i},SA_{i+1}$来说,应该尽量使得$s[SA_{i}]=s[SA_{i+1}]$.如果这个满足的话,那么需要两个后缀满足$s[SA_{i}+1\sim n-1]<s[SA_{i+1}+1\sim n-1]$,设他们的排名分别为$SA_{r},SA_{k}$,也就是说$r<k$即可.…
problem1 link 假设第$i$种出现的次数为$n_{i}$,总个数为$m$,那么排列数为$T=\frac{m!}{\prod_{i=1}^{26}(n_{i}!)}$ 然后计算回文的个数,只需要考虑前一半,得到个数为$R$,那么答案为$\frac{R}{T}$. 为了防止数字太大导致越界,可以分解为质因子的表示方法. problem2 link 假设终点所在的位置为$(tx,ty)$,那么所有底面是$1x1$的格子$(x,y)$一定满足$(x-tx)mod(3)=0,(y-ty)mod…
problem1 link 对于数字$x$,检验每个满足$x=y*2^{t}$的$y$能否变成$x$即可. problem2 link 如果起点到终点有一条长度为$L$的路径,那么就存在长度为$L+kR$的路径.其中$R$为从路径上某点转一圈再回到这一点的环的长度. 为了保证总是存在这个环,可以令这个环为从起点出发再回到起点.所以如果有一条长度为$d$的边$0\rightarrow t$,那么可以令$R=2d$,即$0\rightarrow t \rightarrow 0$. 只需要记录起点到达…
problem1 link 计算每个格子向上的最大高度.然后每个格子同一行前面的格子以及当前格子作为选取的矩形的最后一行,计算面积并更新答案. problem2 link 对于两个数据$(x_{1},y_{1}),(x_{2},y_{2})$,若先完成第一个再完成第二个,那么一开始的值$F$需要满足$F\geq max(x_{1}, x_{2}+(x_{1}-y_{1}))$,反过来需要满足$F\geq max(x_{2}, x_{1}+(x_{2}-y_{2}))$.所以若前者更优的话,那么有…
problem1 link 首先,如果一个数字的某一位是1但是$goal$的这一位不是1,那么这个数字是不用管它的.那么对于剩下的数字,只需要统计在$goal$为1的位上,这些数字对应位上也是1的数字个数.所有这样的位取最小值即可.这些数字就是要都被删除的. problem2 link 首先暴力枚举哪些行是最后回文的行.然后对于列来说,将其对称折叠成$\frac{m}{2}$列,每一列可以选择0.1.2个,最后选出$columnCount$列.这个可以动态规划. problem3 link 考虑…
problem1 link 判断最后剩下哪些区间没有被其他区间覆盖. problem2 link 假设$b$的位置固定,那么不同的$a$会使得$[a,b]$有两种情况,第一种,$[a,b]$ is nice;第二种$[a,b]$有一个后缀的连续$G$但是少于$minGreen$个.第一种情况,$[c,d]$可以任意取:第二种情况,假设$[a,b]$的后缀有$m$个‘G’,那么$[c,d]$要么is nice,要么其前缀需要有至少$minGreen-m$个连续‘G’.所以需要维护$b$之后有多少个…
problem1 link 对于每一个,找到其在目标串中的位置,判断能不能移动即可. problem2 link 如果最后的$limit$为$11=(1011)_{2}$,那么可以分别计算值为$(1011)_{2},(1010)_{2},(100x)_{2},(0xxx)_{2}$的答案数,$x$位置表示可以为任意.也就是可以忽略这些位. 当答案固定时,可以用高斯消元求解. problem3 link 令$d(i,j)$表示点 $i$到点$j$的距离. 使用最小割求解.将每个点拆成$n$个点,第…
problem1 link 最优的策略就是从最低下一层开始,每两层的三个节点的子树都可以用一次遍历覆盖. problem2 link 从大到小依次放置每一种数字,并记录已经放置的数字一共有多少个$m$以及有多少个严格的升序列$K$.那个如果新放置的一个数字(必然小于序列中所有的数字)放在了升序列的开头,那么升序列个数不变;否则升序列的个数增加1.所以有$K$个位置可以使得升序列个数不变,而有$n+1-K$个位置使得升序列个数增加1.现在考虑新放置的数字有多个的情况.假设新放置的数字有$n$个,首…
problem1 link 最优选择一定是在$2n$个端点中选出两个. problem2 link 分开考虑每个区间.设所有区间的左端点的最大值为$lc$,所有区间的右端点的最小值为$rc$.对于某个区间$L$,其实就是找最少的区间(包括$L$)能够完全覆盖区间$[lc,rc]$. 设$L$的左右端点为$L_{1},L_{2}$.考虑从$L_{1}$向左扩展,每次扩展一定是找一个区间$p$满足$p_{2}\geq L_{1}$且使得$p_{1}$最小.右端点向右扩展类似. problem3 li…
problem1 link 找到周期,每个周期的增量是相同的. problem2 link 对于分给某一个公司的有$c$个联通分量,其中$k$个联通分量只有1个节点,$c$个联通分量一共有$x$个节点.首先,对于那些节点大于1的联通分量($c-k$个),将这些连接在一起需要$c-k-1$条边,耗费了$2(c-k-1)$个节点.还有$x-k-2(c-k-1)$个节点可以用来连接那些只有1个节点的联通分量,分两种情况: (1)$k \leq x-k-2(c-k-1)$.这时候不需要额外的代价. (2…
problem1 link $f[i][j]$表示经过前$i$个怪物之后,花费$j$个硬币可以得到的最大值. problem2 link 设$nim[i]$表示数字$i$的nim值.那么题目就是求有多少个区间$[L,R]$满足这个区间内所有数字的nim值的抑或不是0.通过记录前缀和的个数,可以$O(n)$计算得到.现在问题是计算每个值的nim值. 可以用数学归纳法证明$i$的nim值等于$i$中的质因子的个数,比如$nim[6]=2,nim[12]=3$等.所以对于给出的的区间$[L,R]$,只…
problem1 link 从大到小贪心,较大的数字应该放置在较浅的位置. problem2 link 最后的位置要么都是整数(经过偶数次变换),要么是$(p.5, q.5)$这种位置(奇数次变换). 先假设是偶数次变换.那么可以从最终的点向前枚举变换的次数,可以发现,每两次变换相等于向外扩展一圈.假设向外扩展了$k$圈(经过$2k$步变换),那么如果每个最终的点向外扩展$k$圈后,由于这些正方形相交导致出现了一个新的正方形(这个正方形边长也是$2k$),那么就出现了错误(因为这将导致最后的答案…
problem1 link 直接动态规划即可. problem2 link 假设有$r$行,$c$列被修改了奇数次,那么一定有$r*W+c*H-2*r*c=S$.可以枚举这样的组合$(r,c)$,然后计算答案.比如对于$r$行来说,首先需要从$H$行中选出$r$行,即$C_{H}^{r}$.然后对于剩下的$Rcount-r$(一定是偶数)次修改.令$t=\frac{Rcount-r}{2}$,那么就是求有多少个$H$元组 $(a_{1},a_{2},..,a_{H})$满足$a_{i} \ge…
problem1 link 因为数据比较小,直接开一个二维数组记录哪些格子已经遍历,哪些还没有.进行模拟即可. problem2 link 模拟一些小数据,可以发现,AB的形状以及要求的区间是下面的样子: 对于每个答案中的格子,直接去找它是哪种格子即可.每一次$x$都会变为原来的三分之一. problem3 link 首先,可以求出需要的最少改变的次数.在最少的改变次数之后的改变一定是对每个改变的位置改变了至少三次(3的倍数),这样的话代价一定是$costs[0]+costs[1]+costs[…
problem1 link 这个可以贪心地从前向后构造.假设当前已经的字符串为$S$,对于一个字符$c$来说,设将$c$加到$S$后得到的新串为$S^{'}$.那么如果$X+Y+Z \ge minInv$,那么这个之后的构造就是有解的.其中$X$表示$S^{'}$中逆序对个数:$Y$表示剩下的字符与$S^{'}$中的字符构成的逆序对的个数:$Z$表示剩下的字符能构成的最大逆序对个数(从大到小排列即可). problem2 link 首先处理掉垂直发射的情况.剩下的就是不垂直的.直接枚举直线的斜率…
problem1 link 对于每个质因子$p$,枚举其出现的最少次数以及最多次数分别在哪个数字中. problem2 link 分数规划.题目是求$\frac{3600K+\sum_{i=0}^{K-1}a_{c_{i}}p_{c_{i}}}{\sum_{i=0}^{K-1}a_{c_{i}}}*totalWork$.其中$c_{i}$是选出的第$i$个元素.二分$\frac{3600K+\sum_{i=0}^{K-1}a_{c_{i}}p_{c_{i}}}{\sum_{i=0}^{K-1}a…
problem1 link 设第一个数字为$x$,那么第2到第$n$个数字都可以表示成$a+bx$的形式,其中$b=1$或者$b=-1$.然后可以求出关于$x$的一些范围,求交集即可. problem2 link 设$f[i][r][g][b]$表示前$i$个已经染色完毕,第$i$颜色为$(r,g,b)$的概率.假设由$(r,g,b)$可以转移到的状态个数为$T$,那么每个可以转移到的状态$(r^{'},g^{'},b^{'})$都可以得到$\frac{f[i][r][g][b]}{T}$的贡献…
problem1 link 最后剩下的是中间的一个矩形.所以可以直接枚举这个矩形,如果它含有的硬币个数等于$K$,则再计算移动的最少次数,更新答案. problem2 link 首先,每个节点发送每种消息最多只发送一次:其次,在得到消息之后一定是马上发送而不是等待一会儿再发送:最后一点是,如果第$i$天发送了一种消息,一定可以在第$i+1$天发送另外一种消息. 现在的问题是,一个节点同时有两种消息时,应该首先发送哪一种.这个可以$2^{n}$枚举第一次发送的消息类型,然后模拟即可.在模拟过程中可…