team2012-C3
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
陈泽闽
QQ: 545258758
邮箱用的是qq邮箱= =!
[wiki:Flandre_Scarletsplay splay]
[wiki:Flandre_Scarletsuffixarray suffixarray]
解题报告
0001
给出一个n个点,m条边的图,每个点有一个分值p[i],走到某个点,你的当前分值=lcm(当前分值,p[i]),一开始你在1号点,问到达n号点的时候分值为k的方案数,注意每一步你的分数都必须改变。
注意到j的约数是根号n级别的,f[i][j]表示到达i节点,得分是p的第j小个约数的方案数,直接转移即可。
0002
有n天要复习n门课,有m个限制条件,第x天不能复习第y门课,问所有可行的方案数。
这题显然是容斥原理,注意要去重。
0003
给出一些数,问能否通过异或操作得到与目标数误差不超过3的数,误差为在二进制表示下,不同的位的个数。
先预处理出基底,枚举答案,判断是否可行。
0004
给出平面上4个圆的圆心坐标,求一种方案使得所有圆不想交且所有圆的半径总和最大。
一个简单的线性规划问题,列出所有的限制的式子后,发现可以推出两两分组,答案最小的那一组是可行的最大答案。
0005
给出一个n+1行,m+1列的格点图,问在图中选取3个点,使得它们能组成三角形的方案数。
一个组合数学的问题,三角形的个数=所有点中选3个点的方案数-3个点在同一直线上的方案数。
0006
给出一棵n个节点的树,每个点上都有1个权值,一颗子树的权值定义为它的所有节点的权值的和,现在要你砍掉一个节点,使得剩下的树的权值相乘最大。
预处理遍历一次树得出以i为根的子树的权值以后就能很容易的得出答案,因为每条边会被枚举两次,所以时间复杂度是O(n)的,要用高精度。
0007
给出一列数,询问一段区间里面是否有重复的数,如果有重复的,输出从右边开始数,第一个重复的数。
预处理出相同数字下一个的出现位置,用一些数据结构搞一搞就可以了= =!
0008
有一个赏金猎人要依次通过n个城市,在第i个城市,他可以用钱按当前城市的比率换成攻击力,然后再用当前的攻击乘以一个数赚钱,给出他初始的时候的攻击力和钱以及每个城市的兑换比率,问最后他最多能获
取多少钱。
用f1[i]表示当前有1点攻击力能在i这个城市以及后面的城市赚多少钱,f2[i]表示当前有1块钱能在i这个城市以及后面的城市赚多少钱,然后倒着dp一遍就可以了。
0009
g(x) = x^(x/2)
h1(x) = x / m1 * m1 + ( x + s1) % m1
h2(x) = x / m2 * m2 + ( x + s2) % m2
f(x) = g( h2( g( h1( g( x ) ) ) ) )
给出一堆x和f(x),要你求出这个函数的四个参数s1,s2,m1,m2。
枚举两个数,算出另外两个数(喂,说得很简单的样子!)。先要找出g(x)的反函数,剩下的就可以慢慢地推出来了!
0010
你在一个k*n的迷宫的左边,你现在要跑到迷宫的右边去,问方案总数。迷宫里面有3种方格,因为迷宫里面都是按段分布的,所以对于每一段,我们可以分开处理。
对于每一段,我们可以先预处理出dp的转移方程,然后加一个矩阵优化算出方案数,最后的时候把所有段连接起来就可以了。
0011
给出一条折线段,现在要擦去和涂上某些区域,问最后被涂上的线段的总长度。
判断线段和矩形的交,一条线段与一个矩形的交可以用两个向量的长度来表示一下。处理的时候可以先求出直线与竖直的两条边相交的一段,再求出直线与水平的两条边相交的一段,第三段则是线段自己本身,然
后三段求一下交集,就能得出两个点,后面就变成了一个覆盖的问题,对于水平的线段和竖直的线段,我们可以特判一下。
0012
给出两个长度为n的序列,每个序列都是1到n,给出第一个序列的x和第二个序列的y之间能相连了,问在没有线段相交的情况下,最多能有多少条线段相连。
解法就是一个类似最长不下降序列的dp。
0013
给出一个格子图,每个点可以是空格、障碍、或者是人,人是有目光长度的,如果你走到人的目光内,那么代价+1,每个人会随着时间转变自己的朝向,问从起点到终点的最少代价。
按时间拆点,然后最短路就可以了。
0014
一个三维空间里,你必须在n组气球里面选出n个气球来,每组只能选一个,所有气球的半径是统一的,问半径最长是多少。
二分答案,然后就变成了一个2-sat。
0015
给出一个n个节点的树,每个节点能染c种颜色,相邻的节点不能染相同的颜色,问在树上添加一条边后,可行的方案数会减少多少。
lca+一个简单的dp。
0016
给出一个L*W*H的立方体,每个格子里有一个数,每次可以将相邻的格子里的数同时加上或减去一个数,问最后能否使得所有的格子都变为0,相邻是有同一个面的两个格子。
将立方体的每一个格子黑白染色,两边数字的和相同的时候就可行,否则不可行。
0017
给出一个n个节点的多边形,多边形的每个点上有一个点对(x,y),一个多边形是合法,当且仅当所有相邻的点对至少有一个值是一样的,给出多边形上8个点的点对,问合法的方案数。
一个用矩阵优化的dp。
0018
麻将题,麻将里胡牌是要凑成4个面子和一个对子,现在给出你13张牌,问最后哪些牌能胡牌。
枚举剩下的一张,然后判断是否胡牌。
0019
前面说的就是要你做一次最大生成树= =!然后得到这棵树以后,有q个询问,询问从x节点到y节点的路径上,某两个节点的差值最大是多少,注意这个差值是有方向的,只能是后面的数-前面的数。
用倍增的思想处理一下整棵树,注意有顺着和反着两个方向,要分别处理。
0020
大菠萝3,就是你要依次经过一些精英怪和boss,你可以秒杀精英怪,没杀死一个精英怪,你的buff+1,buff的上限是5,当你有5个buff的时候,你打boss就会掉落东西,且打完后buff会消失。然后给出你自
己和所有boss的攻击力,hp上限。再给出,嗑药能补的血,问最后打出最多的东西最少要用多少药。
一个dp,用单调队列弄一下,然后打boss的时候再用一下记忆化搜索。
0021
直升飞机要飞过一段山脉,问到达终点最少要飞多远。
就是一个凸包……
0022
就是给出n只球队的对战情况,再给出一堆很复杂的比较方法,问最后所有球队的名次。
一个复杂的排序,注意净胜球可以是负的,咦,好像谁被黑了!
0023
你要给n个村庄分配m辆马车,每个村庄的人回去最近的有马车的村庄,现在要求分配后使得所有村庄的人走的路程和最小,在同样能达到和最小的方案里,选择字典序最小的方案。求出方案后,每个村庄都有一定
的货物,要求所有马车能装的货物最大的最小。
这题关键是要求出每辆马车所在的位置,这个可以转换思路,用插入村庄的思想得出每辆马车的位置。
0024
有n个玩具排成一排,每个玩具有一个高度,推倒一个玩具后会引发连锁,使得一堆玩具倒下,问手动最少推倒几个玩具,能使得所有玩具都被推倒。
先按x坐标排序,f[i]表示推倒(我喜欢这个词!!)前i个玩具所用的最少时间,然后我们预处理出每一个积木向左推最远能推到哪个积木、向右推最远能推到哪个积木,就可以用线段树来优化这个dp了。
陈泽闽
QQ: 545258758
邮箱用的是qq邮箱= =!
解题报告
0001
给出一个n个点,m条边的图,每个点有一个分值p[i],走到某个点,你的当前分值=lcm(当前分值,p[i]),一开始你在1号点,问到达n号点的时候分值为k的方案数,注意每一步你的分数都必须改变。
注意到j的约数是根号n级别的,f[i][j]表示到达i节点,得分是p的第j小个约数的方案数,直接转移即可。
0002
有n天要复习n门课,有m个限制条件,第x天不能复习第y门课,问所有可行的方案数。
这题显然是容斥原理,注意要去重。
0003
给出一些数,问能否通过异或操作得到与目标数误差不超过3的数,误差为在二进制表示下,不同的位的个数。
先预处理出基底,枚举答案,判断是否可行。
0004
给出平面上4个圆的圆心坐标,求一种方案使得所有圆不想交且所有圆的半径总和最大。
一个简单的线性规划问题,列出所有的限制的式子后,发现可以推出两两分组,答案最小的那一组是可行的最大答案。
0005
给出一个n+1行,m+1列的格点图,问在图中选取3个点,使得它们能组成三角形的方案数。
一个组合数学的问题,三角形的个数=所有点中选3个点的方案数-3个点在同一直线上的方案数。
0006
给出一棵n个节点的树,每个点上都有1个权值,一颗子树的权值定义为它的所有节点的权值的和,现在要你砍掉一个节点,使得剩下的树的权值相乘最大。
预处理遍历一次树得出以i为根的子树的权值以后就能很容易的得出答案,因为每条边会被枚举两次,所以时间复杂度是O(n)的,要用高精度。
0007
给出一列数,询问一段区间里面是否有重复的数,如果有重复的,输出从右边开始数,第一个重复的数。
预处理出相同数字下一个的出现位置,用一些数据结构搞一搞就可以了= =!
0008
有一个赏金猎人要依次通过n个城市,在第i个城市,他可以用钱按当前城市的比率换成攻击力,然后再用当前的攻击乘以一个数赚钱,给出他初始的时候的攻击力和钱以及每个城市的兑换比率,问最后他最多能获
取多少钱。
用f1[i]表示当前有1点攻击力能在i这个城市以及后面的城市赚多少钱,f2[i]表示当前有1块钱能在i这个城市以及后面的城市赚多少钱,然后倒着dp一遍就可以了。
0009
g(x) = x^(x/2)
h1(x) = x / m1 * m1 + ( x + s1) % m1
h2(x) = x / m2 * m2 + ( x + s2) % m2
f(x) = g( h2( g( h1( g( x ) ) ) ) )
给出一堆x和f(x),要你求出这个函数的四个参数s1,s2,m1,m2。
枚举两个数,算出另外两个数(喂,说得很简单的样子!)。先要找出g(x)的反函数,剩下的就可以慢慢地推出来了!
0010
你在一个k*n的迷宫的左边,你现在要跑到迷宫的右边去,问方案总数。迷宫里面有3种方格,因为迷宫里面都是按段分布的,所以对于每一段,我们可以分开处理。
对于每一段,我们可以先预处理出dp的转移方程,然后加一个矩阵优化算出方案数,最后的时候把所有段连接起来就可以了。
0011
给出一条折线段,现在要擦去和涂上某些区域,问最后被涂上的线段的总长度。
判断线段和矩形的交,一条线段与一个矩形的交可以用两个向量的长度来表示一下。处理的时候可以先求出直线与竖直的两条边相交的一段,再求出直线与水平的两条边相交的一段,第三段则是线段自己本身,然
后三段求一下交集,就能得出两个点,后面就变成了一个覆盖的问题,对于水平的线段和竖直的线段,我们可以特判一下。
0012
给出两个长度为n的序列,每个序列都是1到n,给出第一个序列的x和第二个序列的y之间能相连了,问在没有线段相交的情况下,最多能有多少条线段相连。
解法就是一个类似最长不下降序列的dp。
0013
给出一个格子图,每个点可以是空格、障碍、或者是人,人是有目光长度的,如果你走到人的目光内,那么代价+1,每个人会随着时间转变自己的朝向,问从起点到终点的最少代价。
按时间拆点,然后最短路就可以了。
0014
一个三维空间里,你必须在n组气球里面选出n个气球来,每组只能选一个,所有气球的半径是统一的,问半径最长是多少。
二分答案,然后就变成了一个2-sat。
0015
给出一个n个节点的树,每个节点能染c种颜色,相邻的节点不能染相同的颜色,问在树上添加一条边后,可行的方案数会减少多少。
lca+一个简单的dp。
0016
给出一个L*W*H的立方体,每个格子里有一个数,每次可以将相邻的格子里的数同时加上或减去一个数,问最后能否使得所有的格子都变为0,相邻是有同一个面的两个格子。
将立方体的每一个格子黑白染色,两边数字的和相同的时候就可行,否则不可行。
0017
给出一个n个节点的多边形,多边形的每个点上有一个点对(x,y),一个多边形是合法,当且仅当所有相邻的点对至少有一个值是一样的,给出多边形上8个点的点对,问合法的方案数。
一个用矩阵优化的dp。
0018
麻将题,麻将里胡牌是要凑成4个面子和一个对子,现在给出你13张牌,问最后哪些牌能胡牌。
枚举剩下的一张,然后判断是否胡牌。
0019
前面说的就是要你做一次最大生成树= =!然后得到这棵树以后,有q个询问,询问从x节点到y节点的路径上,某两个节点的差值最大是多少,注意这个差值是有方向的,只能是后面的数-前面的数。
用倍增的思想处理一下整棵树,注意有顺着和反着两个方向,要分别处理。
0020
大菠萝3,就是你要依次经过一些精英怪和boss,你可以秒杀精英怪,没杀死一个精英怪,你的buff+1,buff的上限是5,当你有5个buff的时候,你打boss就会掉落东西,且打完后buff会消失。然后给出你自
己和所有boss的攻击力,hp上限。再给出,嗑药能补的血,问最后打出最多的东西最少要用多少药。
一个dp,用单调队列弄一下,然后打boss的时候再用一下记忆化搜索。
0021
直升飞机要飞过一段山脉,问到达终点最少要飞多远。
就是一个凸包……
0022
就是给出n只球队的对战情况,再给出一堆很复杂的比较方法,问最后所有球队的名次。
一个复杂的排序,注意净胜球可以是负的,咦,好像谁被黑了!
0023
你要给n个村庄分配m辆马车,每个村庄的人回去最近的有马车的村庄,现在要求分配后使得所有村庄的人走的路程和最小,在同样能达到和最小的方案里,选择字典序最小的方案。求出方案后,每个村庄都有一定
的货物,要求所有马车能装的货物最大的最小。
这题关键是要求出每辆马车所在的位置,这个可以转换思路,用插入村庄的思想得出每辆马车的位置。
0024
有n个玩具排成一排,每个玩具有一个高度,推倒一个玩具后会引发连锁,使得一堆玩具倒下,问手动最少推倒几个玩具,能使得所有玩具都被推倒。
先按x坐标排序,f[i]表示推倒(我喜欢这个词!!)前i个玩具所用的最少时间,然后我们预处理出每一个积木向左推最远能推到哪个积木、向右推最远能推到哪个积木,就可以用线段树来优化这个dp了。