摘要:
【问题背景】 A柱子上有a个从上到下半径依次递减的圆盘。 A是初始柱子 B是空柱子 C也是空柱子 你要求把A上的a个圆盘都放到C柱子上去 并且C柱子上最后的圆盘的次序也同初始的A柱子一样 在移动盘子的过程中,不能将大盘子放在小盘子上面 一次只能移动一个圆盘 【详解】 这个问题可以分为三个步骤: 1. 阅读全文
摘要:
理解的精髓在于用"栈"来取代递归,出栈的操作其实就相当于某层递归的出口 【前序遍历】 用栈来替代递归的过程(因为递归归根到底也是用栈来实现的) 考虑递归的时候 每进入一个递归都会往左子树试探,因此一直往左子树走到头,遇到一个节点就访问它 然后压入栈中 访问完左子树之后再回过头继续对每个节点的右子树进 阅读全文
摘要:
【链接】 "我是链接,点我呀:)" 【题意】 要让前i个数字的和小于等于M. 问你最少要删掉前i 1个数字中的多少个数字,每个询问都是独立的。 【题解】 ti的范围很小。 所以N MAX(TI)暴力枚举就行。 如果超过了M的话显然是优先把大的数字删掉。 【代码】 cpp include using 阅读全文
摘要:
【链接】 "我是链接,点我呀:)" 【题意】 有人要从A地飞向B地,然后从B地飞向C地。 给出A,B地的n、m个航班的出发时间。 已知从A到B的航班都是ta和tb时长到达B、C 只有到达B的时候航班还没起飞才能乘坐(当然也可以等下一班) 问你现在你可以去掉最多K个航班,这个人到达C地最晚的时间是啥时 阅读全文
摘要:
【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 先把所给的压缩形式的字符串转成二进制 然后对获得的01数组做一个前缀和(a[i][j]=以(i,j)为右下角,(1,1)为左上角的矩形内的数字的和) 这样就能O(1)复杂度获得一个长度为x的正方形的区间和了。 这样。我们直接暴力从1..n 阅读全文
摘要:
【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 设最后行分成了x行,列分成了y列。 那么答案就是floor(n/x) floor(n/y) 然后x+y 2=k //即平均分配x行、y列 我们可以枚举floor(n/x)的值 这个值其实就是n整除x 我们现在证明n/x的结果最多只可能有2 阅读全文
摘要:
【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 用floyd思想。 求出来这条新加的边影响到的点对即可。 然后尝试更新点对之间的最短路就好。 更新之后把差值从答案里面减掉。 【代码】 cpp include define ll long long using namespace std 阅读全文
摘要:
【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 算出来每个盘子要占用多少角度。 然后乘n看看是不是小于等于2π就好 (精度最好定在1e 7) 【代码】 cpp include define ll long long define double long double using nam 阅读全文
摘要:
【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 我们最后要的是一条最长的路径。 这条路径的权值和是所有点的权值和 所有边的权值和且这个值最大。 显然如果我们在某一条边上的累计的权值和=0) 所以如果我们求的是最大的权值和 边权和的话,那么求出来的路径一定不会有中间某个地方走着走着没油的 阅读全文
摘要:
【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 dp[i][j][k]表示前i列,有j个联通块下,最后一列的状态为k的方案数 k如果为1的话,表示最后一列两个块不一样,k如果为0表示一样 枚举最后一列的情况转移就好 【代码】 cpp include using namespace st 阅读全文