TopCoder SRM 489 Div1 Lev3:AppleTree】的更多相关文章

挺优秀的一道题,想出做法时有些惊艳. 题意: 数轴上有\(D\)个连续整数刻度,有\(N\)棵树要种在这些刻度上,其中第\(i\)棵与两旁(如果有的话)相邻的树至少要相距\(R_i\),问方法数. \(1 \leq N , R_i \leq 40\) 思路: 首先,如果确定了种树的顺序,就确定了相邻树的最小间距.把\(D\)减掉最小间距之和,所得的就是"冗余刻度"的数量. 把这个数量分配给\(N+1\)段间隙,用插板法可以求出方法数. 所以问题在于,对于每一个\(L\),求出1到\(N…
Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结论,将点按照权值大小排序后,从大到小加点的充要条件是完美匹配大小 \(+1\) .考虑如果不是按照这种方式加点的,必然能找到一个没有被匹配的点替换掉一个在匹配中但是权值比它小的点,答案一定会变大. 于是我们可以从大到小枚举点,如果能加进去且完美匹配大小增加就加入这个点,否则就不加. solutoin…
Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*......*pn,我们假设p0,p1,...,pn是单调不降的,那么v里存储的是下标为偶数 的N的质因数p0,p2,p4,...,p(2k).现在要求写一个程序,返回一个vector<long long>ans; ans里存储的是p0,p1,p2,...,pn. Limits Time Limit(m…
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…
打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加就会加D[i],如果减就会减D[i],但是如果rating小于0了就变成0,这个人不太喜欢比较厉害的颜色,所以他不能连续两次rating大于等于2200,求颜色变化的最多个数,保证比赛最多50场,D[i]<=10^9. 这套题还是很难的,所以我们来好好分析. 首先,样例0告诉我们贪心什么都是假的,不…
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…
思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> #include<set> #include<map> #include<stack> #include<vector> #include<algorithm> #includ…
604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是dp题.(当时居然没有实现上-_-||) 从小向大填数,状态是A选了i个,B选了j个,目前最大k个数在哪个集合中(可以用二进制压缩状态). C: 还是dp,感觉不太好想. 前i个,目前用位置j的数来覆盖,用了k次操作,(i - 1)是否在j中(这样可以判断目前位置是否可以无花费的被覆盖),转移见代码.…
problem1 link 如果$k$是先手必胜那么$f(k)=1$否则$f(k)=0$ 通过对前面小的数字的计算可以发现:(1)$f(2k+1)=0$,(2)$f(2^{2k+1})=0$,(3)其他情况都是1 这个可以用数学归纳法证明 problem2 link 假设字符串的总长度为$n$ 首先,设$x_{k}$为位置$i$经过$k$ 次交换后仍然在$i$的概率,那么在其他位置$j(j\ne i)$的概率为$\frac{x}{n-1}$.可以得到关于$x_{k}$的转移方程$x_{0}=1,…
problem1 link 首先枚举长度$L$.然后计算每一段长度$L$的差值最大公约数,然后差值除以最大公约数的结果可以作为当前段的关键字.然后不同段就可以比较他们的关键字,一样就是可以转化的. problem2 link 对于那些一定要换的,把它们的places和cutoff拿出来,排个序.设它们为$p_{1},p_{2},..,p_{k},c_{1},c_{2},..,c_{k},$.最优的策略一定是从小到大挨个匹配. 如果到了某个位置不能匹配,比如$t$.那么需要从那些不需要交换的组里面…
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 首先,如果一个数字的某一位是1但是$goal$的这一位不是1,那么这个数字是不用管它的.那么对于剩下的数字,只需要统计在$goal$为1的位上,这些数字对应位上也是1的数字个数.所有这样的位取最小值即可.这些数字就是要都被删除的. problem2 link 首先暴力枚举哪些行是最后回文的行.然后对于列来说,将其对称折叠成$\frac{m}{2}$列,每一列可以选择0.1.2个,最后选出$columnCount$列.这个可以动态规划. problem3 link 考虑…
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 对于分给某一个公司的有$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 模拟一些小数据,可以发现,AB的形状以及要求的区间是下面的样子: 对于每个答案中的格子,直接去找它是哪种格子即可.每一次$x$都会变为原来的三分之一. problem3 link 首先,可以求出需要的最少改变的次数.在最少的改变次数之后的改变一定是对每个改变的位置改变了至少三次(3的倍数),这样的话代价一定是$costs[0]+costs[1]+costs[…
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}$枚举第一次发送的消息类型,然后模拟即可.在模拟过程中可…
problem1 link 设$f[i][j][k]$表示考虑了前$i$道题,剩下时间为$j$,剩下技能为$k$的最大得分. 从小到大计算二元组$(j,k)$的话,在存储上可以省略掉$i$这一维. problem2 link 首先,不同的提交状态有8种.预计算每一种提交状态的每一个分值的种数,设为$g[mask][score]$.对于$g[mask][score]$的计算,可以枚举$mask$包含的一个题目,设为$i$,其分值为$p_{i}$,那么第$i$道题得分如果为$x$,那么其他$mask…
problem1 link 对于每个还未切掉的‘X’用cutter作用一次.从左上角到右下角,依次判断即可. problem2 link 首先,如果一个顶点不能从0到达或者不能到达节点$n-1$,那么可以直接将这个顶点从图中删掉.所以,可以认为每个顶点都可以从节点0到达且可以到达节点$n-1$. 按照如下策略进行路径选择: (1)设初始时已访问节点集合$S$只包含节点0: (2)对于$[1,n-2]$中的每个节点,找到一个节点$t$,满足在$S$中存在一个节点$r$,使得$r$->$t$有一条直…
problem1 link 暴力枚举即可. problem2 link 一共有24小时,所以最多有24个顾客.设$f[x][y][z]$表示还剩下$x$把刀,现在时间是$y$,以及来过的顾客集合为$z$可以获得的最大值. 那假设第$y$小时来的顾客为$t$,来的概率为$p$,有三种情况: (1)之前它来过,那么$f[x][y][z]=f[x][y+1][z]$ (2)之前没来过,现在也没来,$f[x][y][z]=(1-p)*f[x][y+1][z]$ (3)之前没来过,现在来了.可以选择买给他…
problem1 link 令$f(x)$表示[0,x]中答案的个数.那么题目的答案为$f(b)-f(a-1)$ 对于$f(x)$来说,假设$x$有$d$位数字,即$[0,d-1]$,那么可以进行动态规划,令$dp(i,s)$表示已经考虑了$[i,d-1]$位的数字,状态为$s$的方案数.状态需要五种: 0: 前面都是0 1: 前面不都是0,前高位数字小于$x$且未出现非4,7的数字 2: 前面不都是0,前高位数字等于$x$且未出现非4,7的数字3: 前面不都是0,前高位数字小于$x$且出现非4…
problem1 link 设行数为$n$列数为$m$ 对于任意的两行$r_{1},r_{2}$以及任意的两列$c_{1},c_{2}$所确定的四个格子,只要知道其中的三个就能确定第四个,且必须要三个. 这样的话,可以看作$n+m$个节点,如果$(i,j)$为‘Y’那么将第$i$行表示的节点和第$j$列表示的节点连一条边.这样的话,每个联通块都代表了一个子矩阵. 假设有$k$个联通块,那么答案为$k-1$. 因为需要将$k$个联通块连接起来. problem2 link 首先,如果$A \le…
problem1 link 如果decisions的大小为0,那么每一轮都是$N$个人.答案为0. 否则,如果答案不为0,那么概率最大的一定是一开始票数最多的人.因为这个人每一轮都在可以留下来的人群中. 假设第一轮之后剩下$r_{1}$个人,那么第二轮之后将剩下$r_{2}=N$%$r_{1}$个人.不妨设$r_{1}<N$.第一轮能够使得$r_{1}$个人的票数答案一样多且最多(设这个票数为$x$),那么这个x一定是大于等于单纯由decisions决定出的最大值.而现在$r_{1}<N$了,…
problem1 link 枚举第一个数和第二个数即可确定公差. problem2 link 设高度为$n$,宽度为$m$,且$n \ge m$ 如果$m \ge 5$,那么答案为0.这个可以通过抽屉原理来说明.考虑第一行,假设$n=m=5$,那么第一行最后一定有至少3个白色或黑色,不妨设为白色.不妨单独将这3列抽出来,现在就是一个$5*3(n=5)$的矩阵.那么对于第2,3,4,5行来说,不会存在一行有两个白色.对于黑色格子来说有两种情况: (1)存在一行有三个黑色.那么其他三行不能有两个或者…
problem1 link 直接模拟即可. problem2 link 首先,网关一定是安装在client与server之间的链路上.而不会安装在client与client之间的链路上.对于一条路径c1->c2->c3->c4->s,且不存在任何一个其他的client使得c4到该client存在链路且该client可以到达s.假设c1->c2之间的链路安装了,那么c4->s之间的链路还要安装.所以只需要在c4->s之间的链路安装即可. 所以所有的安装位置一定是在c…
problem1 link 暴力枚举$r$只兔子的初始位置,然后模拟即可. problem2 link 假设刚生下来的兔子是1岁,那么能够生小兔子的兔子的年龄是至少3岁. 那么所有的兔子按照年龄可以分为1岁,2岁,大于等于3岁三种情况.不妨令个数分别为$a_{1},a_{2},a_{3}$ 在每年生完兔子后,假如是四月,这时候1岁的兔子和大于等于3岁的兔子的数量是一样的($a_{1}=a_{3}$).那么在11月的时候,如果要去掉一半的兔子,那么一定是大于等于三岁的所有兔子和2岁兔子的一半.$a…
problem1 link 首先预处理在已选字母的状态为$state$时是否可达. 然后就是按照题目进行dp.设$f[i]$表示已选字母集合为$i$时的结果. 每次可以根据$i$中含有的字母是奇数还是偶数个来确定现在该轮到谁选择. problem2 link 交点可以分为三部分: (1)已经确定的线之间的交点: (2)未确定的线之间的交点: (3)已确定的线与未确定线之间的交点. 第一部分比较容易计算. 对于第二部分,设$f[i]$表示$i$对点之间连线交点期望.那么对于$f[i+1]$来说,就…
problem1 link 以两个点$p,q$为中心的两个正方形的边长和最大为$2dist(p,q)$,即$p,q$距离的两倍. 也就是两个$p,q$的连线垂直穿过两个正方形的一对边且平分两个正方形. problem2 link 简化一下题意就是每个base和每个plant都有一个代价.要么付出某个base的代价,要么付出其对应的plant的代价. 将base和plant建立网络流. 源点到每个plant的边的流量为其代价 base到汇点的边的流量为其代价 base与其对应plant的边的流量为…
problem1 link 设$f[i][j]$表示已经分配了answers中的前$i$个,分配给的问题的状态为 $j$的方案数. 其中状态可以用$n$位的三进制表示,0表示还未分配,1表示已分配是 Yes,2表示已分配是No. problem2 link 假设$n$个城市为[0,n-1].设$f[i][j][t]$表示在[0,i]个城市中已经选择了$j$个城市,选择了$t$个人的概率. 那么选择第$i+1$个城市的概率是$\frac{k-j}{n-i-1}$. problem3 link 首先…