摘要:
传送门 解题思路 不得不说,这题恶心到我了,调了一个多小时。 第一次高精度把运算等写在struct里面,感觉良好。但是一定要注意初始化。 再就是高精乘高精最后的位数是两个位数相加,而不是相乘。 AC代码 #include<iostream> #include<cstdio> #include<cst 阅读全文
摘要:
传送门 解题思路 我们发现若一个原数i经过若干次op操作后能变成另一个原数j,则i没有存在的必要了(因为j更优)。 于是对于每一个ai,就能找到最小的一个原数(这个也是“性价比”最高的原数)。 因为原数数量很少,所以可以用二进制位来表示,假设消灭一个数字用到的是第i个原数,则将这个数字的值赋为2^i 阅读全文
摘要:
//第300篇博客祭QAQ 传送门 解题思路 挺好的一道题。 首先可以观察到,若按照水流方向建边,则整张图是个DAG。 第一步:建图。 令水池(0号店)为根。先用单调递减栈求出每个圆盘下面第一个比他大的圆盘,很显然水就往那里流,将这两个点之间连边,最后0号店向栈中剩下元素连边。 第二步:预处理ST表 阅读全文
摘要:
传送门 解题思路 从前往后维护一个严格单调递减栈,在弹出元素和入栈的时候更新答案。 但是要注意两人身高相等的情况,所以要记下某元素的个数。 细节还是蛮多的。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cma 阅读全文
摘要:
传送门 解题思路 和上一道题基本相同。 但是这个题题面是真的复杂,读了好久才读懂。 关键在于如何建图。 将在第0列可以看做第0个点,第n列可以看做第m+1个点。 这两个特殊的点到其他点的距离为点线垂直距离,其他的点之间的距离为点点距。 还有不同的地方就是两个信号塔之间的距离是两个半径,而0点和m+1 阅读全文
摘要:
传送门 解题思路 两种方法: 方法一: 直接按照Kruskal的方法求最小生成树,求的过程中s和t刚刚联通时加的边的大小即为答案。 方法二: 先二分答案,然后跑一遍最短路,要求只能走边权小于二分值的边。 AC代码 #include<cstdio> #include<iostream> #includ 阅读全文