随笔分类 - ACM——OJ--HDU
摘要:"题目链接" 题意 给出p块钱,现在要用十种硬币凑出,每种硬币有c[i]个,问最多能用多少个硬币。 思路 首先确定,对于每个硬币就是能用小的替换就不用大的。 所以,可以先把硬币尽量用小的替换,如果小的不够用,再用大的去替换。 根据这个思路,就可以处理出一个前 i 个硬币总价值的前缀和 pre[],从
阅读全文
摘要:"题目链接" 题意 给出一个n个结点的树,给出n 1个度的权值f[],代表如果一个点的度数为i,那么它对于答案的贡献有f[i]。问在这棵树最大的贡献能达到多少。 思路 对于这个图,有n 2 2个度可以分配(看成一条链的形状),首先可以确定n个点,那么每个点都是要分配一个度的,因此现在有n个f[1],
阅读全文
摘要:"题目链接" 题意 求有向图的最小生成树,且根不定。 思路 最小树形图即求有向图的最小生成树,用的是朱刘算法。 这里不定根,那么可以建立一个虚根,让虚根和所有点相连,权值为一个很大的数(这里直接设为所有边之和+1)。 如果最后的答案比两倍的sum还大,就说明至少有两个点是通过虚边(从虚点走出去的边)
阅读全文
摘要:"题目链接" 题意 给出一个椭圆,问一个[l, r] 区间(蓝色区域)的面积是多少。 思路 "自适应辛普森积分" 具体一些分析如上。 很方便,套上公式就可以用了。 注意 eps 的取值影响了跑的时间,因为决定了递归的深度。 C++ include using namespace std; typed
阅读全文
摘要:"题目链接" 题意 给出n个数,问这些数的某些数xor后第k小的是谁。 思路 高斯消元求线性基。 "学习地址" 把每个数都拆成二进制,然后进行高斯消元,如果这个数字这一位(列)有1,那么让其他数都去异或它,消掉这一列的1,使得最后得到的矩阵某一行如果那一列有1的话,那么其他行是不会有1的(就是线性基
阅读全文
摘要:"题目链接" 题意 给出n个灯,m个开关,每个开关控制一些灯,如果打开这个开关,这个开关控制的灯如果本来灭的就会亮,如果本来亮的就会灭。问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的和。 思路 对于枚举2^m种情况是不实际的。题目要求的求立方和暗含玄机。 设每个灯的状态为X。
阅读全文
摘要:"题目链接" 题意 给出一个n m的图,现在有k种颜色让你对这个图每个格子染色,每种颜色最多可以使用col[i]次,问是否存在一种染色方案使得相邻格子的颜色不同。 思路 以为是构造题,结果是爆搜。对于每一个点,如果可以往右边搜,那么就往右边走,如果右边走不了,就往下重新开一行搜。(否则最后可能不是所
阅读全文
摘要:"题目链接" 题意 给一棵树,每个点上有一个权值,问是否存在一条路径(不能是单个点)上的所有点相乘并对1e6+3取模等于k,输出路径的两个端点。如果存在多组答案,输出字典序小的点对。 思路 首先,(a b) % MOD = k,知道a和k,求b,可以使用 "逆元" 来求,于是可以想到用一个类似于ma
阅读全文
摘要:"题目链接" 题意 给出n个矩形,求周长并。 思路 学了区间并,比较容易想到周长并。 我是对x方向和y方向分别做两次扫描线。应该记录一个pre变量,记录上一次扫描的时候的长度,对于每次遇到扫描线统计答案的时候,使用当前的 去与 做相减,因为这一次如果边长增加了或者减少了,那么一定和之前的值有差值,其
阅读全文
摘要:"题目链接" 题意 给出n个矩形,求面积并。 思路 使用扫描线,我这里离散化y轴,按照x坐标从左往右扫过去。离散化后的y轴可以用线段树维护整个y上面的线段总长度,当碰到扫描线的时候,就可以统计面积。这里要注意线段树上结点维护的是线段的信息,而不是点的信息。 "参考资料" C++ include us
阅读全文
摘要:"题目链接" 题意 给出n个点m条边的无向图,求次短路。 思路 和 "POJ 2449" 类似,只不过大小要开成long long。 C++ include using namespace std; typedef long long LL; const int N = 100011; const
阅读全文
摘要:"题目链接" 题意 给出一个长度为n的数组,每次操作都要删除数组里面非递增的元素,问最终的数组元素有什么。 思路 容易想到用链表模拟删除,但是不能每次都暴力枚举,这样复杂度O(N^2)。想到每次删除元素的时候只会影响前后,因此考虑从前面一个位置开始检查,而不用每次都扫一遍。每次check的时候,发现
阅读全文
摘要:"题目链接" 题意 给出三个圆上的点,和一个目标的点,问目标点是否在这三个点构成的圆外面。 思路 许久没见过的Java高精度,不要加package!!!
阅读全文
摘要:"题目链接" 题意 给出n个点,要把除1以外的点分成k个集合,然后对于每个集合要和1这个点一起求一个最小生成树,然后问这k个最小生成树的最大总和是多少。 思路 因为每个集合都包含1这个点,因此对于每个点都至少有一条到1的路径。可以从1开始DFS,对于每个点u,它和父亲的边的贡献最多可以是min(sz
阅读全文
摘要:"题目链接" 题意 给出一个n和一个k,求1~n的每个区间的第k大的总和是多少,区间长度小于k的话,贡献为0. 思路 首先有一个关系:当一个数是第k大的时候,前面有x个比它大的数,那么后面就有k x 1个比它大的数。 比赛的时候队友想出了用set来维护。一开始是一个空的set,先插入大的数,那么当之
阅读全文
摘要:"题目链接" 题意 给出n个数,问在这n个数里面,有多少组bi(1 using namespace std; const int N = 1e5 + 10; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; typedef long long
阅读全文
摘要:"题目链接" 题意 给出一棵有n个结点的树,每个结点有一个颜色,问在这棵树的所有路径中,每条路径的颜色数求和是多少。 思路 求每种颜色的贡献可以转化为总的和减去每种颜色在哪些路径上没有出现的贡献,一个颜色在树块中的贡献为sz (sz 1)/2。 这个题就是把一棵树分成许多个树块然后统计。 1号结点为
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4055 题意:给一个仅包含‘I','D','?'的字符串,’I'表示前面的数字比后面的数字要小(Increase升序),'D'表示前面的数字比前面的数字要大(Decrease降序),'?'表示有可能是'I'也有可能
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=6019 题意:给出n个颜色的物品,你每次取只能取连续的不同颜色的物品,问最少要取多少次。 思路:从头往后扫,用set存之前取了什么物品,然后每次重复就clear,ans++。
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1565 题意:中文。 思路:一个棋盘,要使得相邻的点不能同时选,问最大和是多少,这个问题就是最大点权独立集。 可以转化为所有的点权 - 最小点权覆盖集(最小割) = 最大点权独立集。 转载两个的定义:这里。 覆盖集
阅读全文

浙公网安备 33010602011771号