摘要: 题目传送门 题目描述 求把N*M的棋盘分割成若干个1*2的的长方形,有多少种方案。 例如当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。 如下图所示: 输入格式 输入包含多组测试用例。 每组测试用例占一行,包含两个整数N和M。 当输入用例N=0,M=0时,表示输入终止,且该用例无 阅读全文
posted @ 2021-02-20 20:42 Livinfly 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 题目描述 给定两个长度分别为N和M的字符串A和B, 求既是A的子序列又是B的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数N和M。 第二行包含一个长度为N的字符串,表示字符串A。 第三行包含一个长度为M的字符串,表示字符串B。 字符串均由小写字母构成。 输出格式 输出一个整 阅读全文
posted @ 2021-02-20 20:41 Livinfly 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 题目描述 有N头牛在畜栏中吃草。 每个畜栏在同一时间段只能提供给一头牛吃草,所以可能会需要多个畜栏。 给定N头牛和每头牛开始吃草的时间A以及结束吃草的时间B,每头牛在[A,B]这一时间段内都会一直吃草。 当两头牛的吃草区间存在交集时(包括端点),这两头牛不能被安排在同一个畜栏吃草。 求需 阅读全文
posted @ 2021-02-20 20:39 Livinfly 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 题目描述 给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后, 剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。 输入格式 第一行包含整数n 阅读全文
posted @ 2021-02-20 20:33 Livinfly 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 我就把它当作线段树的练习题了。 就是求区间最大值,所以我们开个结构体存下它的区间、区间的最大值就好了。 阅读全文
posted @ 2020-12-13 08:59 Livinfly 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 题目是让我们选择$[0,m]$之间的整数$x_0$,经过给定的n次位运算,使结果ans最大 位运算的主要特点之一是`在二进制表示下不进位`。 所以ans的第k位至与$x_0$的第k位是几有关。 $x_0$的第k位填1的条件: 1. 加上 1< 阅读全文
posted @ 2020-12-12 21:17 Livinfly 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 这道题很容易想到的朴素算法,枚举n个点的全排列。 时间复杂度为O($n * n!$) 使用下面的状态压缩dp可以优化到O($n^2 * 2 ^ n$) 比如在 0, 1, 2, 3 这几个点中,我们需要从0 -> 3 0 -> 2 -> 1 -> 3 所需10 0 -> 1 -> 2 -> 3 所需20 我们肯定只选第一条路 很容易理解,若还有其他的点,第二条路总是会比第一条花费多, 所以第二条边没有维护的必要,可以给它删除,保留第一条这条更优的。 注意,删除的前提是他们二者访问的点的个数是一样的,现在在的点的位置是一样的。 但朴素的爆搜还是会搜下去,直到搜完全部点。 这就是主要优化的地方。 阅读全文
posted @ 2020-12-12 20:33 Livinfly 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 1 类快速幂写法。 可以参看[a ^ b](https://www.cnblogs.com/RemnantDreammm/p/14125549.html)的思路说明 2 主要利用 a * b mod p = a * b - $\lfloor$a * b / p$\rfloor$ * p 当M大于a * b时,a * b % p = a * b % M % p 这里的强制转化就是这样一个对一个大数取模的过程。 注意考虑浮点数的精度误差。 书上有些地方使用`ull`,在题目指定范围内,`ll`应当也是能达到同样效果 一些细节将会在代码的注释中说明。 时间复杂度 O(1) 阅读全文
posted @ 2020-12-12 19:48 Livinfly 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 就没什么好说的。直接套快速幂。 阅读全文
posted @ 2020-12-12 19:10 Livinfly 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 思路说明: 若采用a个b一个个相乘取模的方式来做,它的算法复杂度为O(n) 而因为 1. 一位一位的二进制组合可以表示所有的数,即所有数都可以表示为$2^0$+$2^1$+...+$2^n$ 2. a * b mod p == (a mod p) * (b mod p) mod p (咕咕咕,可能之后会在后面补上这数学证明) 所以我们可以把b用一位一位二进制来表示即可把时间复杂度降为O($log_2b$) 阅读全文
posted @ 2020-12-12 18:00 Livinfly 阅读(106) 评论(0) 推荐(0) 编辑