team2012-F2
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
= Personal Information =
Name: Qing REN
Email: {{{renqing@1992y.com}}}
Mobile: 18768186355/626355
QQ: 396794
= Round I =
== Group A ==
=== 0001 ===
本题目是一道在图上的DP,首先进行预处理,计算出所有能整出k的元素,
然后DP,设f[a][b]表示走到第a个节点,分数为b的方案个数,转移为f[a][b] = sum(f[k][x])。
=== 0002 ===
通过离散数学课上学习的容斥原理可以解决这道题目,不知道为什么比赛的时候一直WA = =
需要开一个hash表用来判重复
=== 0003 ===
这道题目可以通过构造一个线性空间,然后求出线性空间的一组线性解基解决题目
=== 0004 ===
给出四个点,以点为圆心画圆且限制四个圆无公共部分相交,求四个圆半径之和的最大值。
可以枚举两两分组,最小的那组是可行的最大答案。
=== 0005 ===
三角形三个顶点的方案数再减去三点共线的方案数,就是答案
三点共线的情况分为 斜率大于零、小于零、等于零和无穷大
=== 0006 ===
本题目需要通过写高精度
首先进行BFS遍历这颗树,然后在树上进行DP就可以了。
== Group B ==
=== 0007 ===
这道题目是比赛时候写的代码
题目大意是给定一个整数序列,然后偶一些查询,查询在某一区间内从右到左第一个重复出现的数字
首先根据数字大小排序,对于重复出现的数字记录它下一次出现的位置
然后将查询读入,根据右区间排序,进行离线化
开一个队列搞一搞就可以了
=== 0008 ===
这道题目用的mj学长的方法解决的
设mow[i]表示如果你在进入第i个城市之前,有1块钱,那么在之后最多能变成多少块钱
设apw[i]表示如果你在进入第i个城市之前,有1点攻击力,那么在之后最多会演化成多少块钱
然后转移什么的直接看代码吧...就像dp一样的思路
唯一需要说明的一点大概是:因为这个转换关系都是常数倍的关系,所以这些获利都可以分开考虑,最后叠加。
=== 0009 ===
这道题目暴力算出四个参数,然后直接计算据可以了...
参数没有计算,直接用题解里面的 - -
=== 0010 ===
以每一列构造一个矩阵,然后根据重复次数进行快速幂就可以了
总而言之,这道题目是矩阵乘法的
=== 0011 ===
这道题目比较难
=== 0012 ===
据说这道题目是我比赛时候写出来的
当时看到一堆人瞬秒,然后看样子像LIS,就贴了一个LIS上去
结果也AC了- -
== Group C ==
今天太没RP了,胃疼了一天TAT
=== 0013 ===
在一个n*m的矩形上,存在着一些守卫,他们按照顺时针方向巡视,每次巡视只能看到一个方向,需要求从起点到终点,最少需要被守卫看到几次
这道题目可以用最短路搞定,用SPFA搞一下就可以了
=== 0014 ===
这道题目鄙人出的,比赛的时候因为精度,给大家造成困扰,表示歉意
题目大意就是,在一个立体空间里面,存在着一堆成对的圆心,你要从每组里面选取一个圆心,构成n个半径相同且没有公共部分的圆,求最大r
这道题目是一道赤裸裸的2-SAT,只要二分然后2SAT一下判断是否可行就好
=== 0015 ===
给定一棵树,然后进行染色,总共有c种颜色,要求相邻两点颜色不能相同,然后有一堆询问,问如果某两点之间增加一条边,方案数会减少多少
对于n节点的书,方案数是C * (C - 1) ^ (N - 1), 然后这道题目可以变为章鱼图模型,求染色方案数可以用DP解决掉
=== 0016 ===
有一个立方体,每个格子上面都有数字,我们可以对相邻的两个格子增加或者减去同一个数,求是否可以全部变成0
进行黑白染色,然后分别将黑格子与白格子的数之和相加,判断是否相等即可
=== 0017 ===
给定一个n边型,每个顶点上有两个属性u,v,要求相邻两顶点至少有一个属性相同,给你8个点的数值,求方案数
先推出dp公式,f[i][1,2,3,4]表示从起点到i的方案数,总共有四种转移,然后再通过矩阵乘法快速求解即可
=== 0018 ===
一开始给你13张牌,问再有什么牌就可以win
首先枚举一下牌,然后在搜索就可以
== Group D ==
=== 0019 ===
先求最小生成树,进行一次Kruskal,然后用LCA倍增法,维护四个数组就可以了
=== 0020 ===
就是有一堆怪物,一些是普通怪一些是老boss,打普通怪可以得到buff,老boss如果集齐5个buff可以获得宝物一个,打boss的时候可以嗑药
求在掉最多宝物的情况下要嗑多少药。难道被EOF给卡TLE了- -
对于每一个老boss通过dp进行预处理,可以通过dp进行预处理,计算pk所需要的嗑药量,共三种转移,然后在进行主dp即可,单调队列维护一下
=== 0021 ===
裸的凸包
=== 0022 ===
这道题目规则好多- -英文看起来好乱
按照规则进行模拟,用递归处理就可以了。
=== 0023 ===
比赛的时候就卡在这道题目上了 - -
构造可以通过贪心的方法,从右到左进行贪心。之后,二分答案,再通过贪心的方法,这次从左到右把货物放入货仓中
=== 0024 ===
这道题目不会做,看了一下出题的KT学姐的解题方法
首先用栈处理出每个木块向左或者向右能够推倒的最远距离lefti和righti。然后再动态规划求解。f[i]表示1-i个骨牌全被推倒并且第i个向左倒最少推几个,
g[i]表示1-i个骨牌全被推倒并且第i个向右倒最少推几个。转移时,平方级的枚举很好想,但是复杂度太高,所以我们需要用到数据结构来维护。用线段树来维护最小值。最后的ans=min(f[n],g[n])。
Personal Information
Name: Qing REN
Email: renqing@1992y.com
Mobile: 18768186355/626355
QQ: 396794
Round I
Group A
0001
本题目是一道在图上的DP,首先进行预处理,计算出所有能整出k的元素,
然后DP,设f[a][b]表示走到第a个节点,分数为b的方案个数,转移为f[a][b] = sum(f[k][x])。
0002
通过离散数学课上学习的容斥原理可以解决这道题目,不知道为什么比赛的时候一直WA = =
需要开一个hash表用来判重复
0003
这道题目可以通过构造一个线性空间,然后求出线性空间的一组线性解基解决题目
0004
给出四个点,以点为圆心画圆且限制四个圆无公共部分相交,求四个圆半径之和的最大值。
可以枚举两两分组,最小的那组是可行的最大答案。
0005
三角形三个顶点的方案数再减去三点共线的方案数,就是答案
三点共线的情况分为 斜率大于零、小于零、等于零和无穷大
0006
本题目需要通过写高精度
首先进行BFS遍历这颗树,然后在树上进行DP就可以了。
Group B
0007
这道题目是比赛时候写的代码
题目大意是给定一个整数序列,然后偶一些查询,查询在某一区间内从右到左第一个重复出现的数字
首先根据数字大小排序,对于重复出现的数字记录它下一次出现的位置
然后将查询读入,根据右区间排序,进行离线化
开一个队列搞一搞就可以了
0008
这道题目用的mj学长的方法解决的
设mow[i]表示如果你在进入第i个城市之前,有1块钱,那么在之后最多能变成多少块钱
设apw[i]表示如果你在进入第i个城市之前,有1点攻击力,那么在之后最多会演化成多少块钱
然后转移什么的直接看代码吧...就像dp一样的思路
唯一需要说明的一点大概是:因为这个转换关系都是常数倍的关系,所以这些获利都可以分开考虑,最后叠加。
0009
这道题目暴力算出四个参数,然后直接计算据可以了...
参数没有计算,直接用题解里面的 - -
0010
以每一列构造一个矩阵,然后根据重复次数进行快速幂就可以了
总而言之,这道题目是矩阵乘法的
0011
这道题目比较难
0012
据说这道题目是我比赛时候写出来的
当时看到一堆人瞬秒,然后看样子像LIS,就贴了一个LIS上去
结果也AC了- -
Group C
今天太没RP了,胃疼了一天TAT
0013
在一个n*m的矩形上,存在着一些守卫,他们按照顺时针方向巡视,每次巡视只能看到一个方向,需要求从起点到终点,最少需要被守卫看到几次
这道题目可以用最短路搞定,用SPFA搞一下就可以了
0014
这道题目鄙人出的,比赛的时候因为精度,给大家造成困扰,表示歉意
题目大意就是,在一个立体空间里面,存在着一堆成对的圆心,你要从每组里面选取一个圆心,构成n个半径相同且没有公共部分的圆,求最大r
这道题目是一道赤裸裸的2-SAT,只要二分然后2SAT一下判断是否可行就好
0015
给定一棵树,然后进行染色,总共有c种颜色,要求相邻两点颜色不能相同,然后有一堆询问,问如果某两点之间增加一条边,方案数会减少多少
对于n节点的书,方案数是C * (C - 1) ^ (N - 1), 然后这道题目可以变为章鱼图模型,求染色方案数可以用DP解决掉
0016
有一个立方体,每个格子上面都有数字,我们可以对相邻的两个格子增加或者减去同一个数,求是否可以全部变成0
进行黑白染色,然后分别将黑格子与白格子的数之和相加,判断是否相等即可
0017
给定一个n边型,每个顶点上有两个属性u,v,要求相邻两顶点至少有一个属性相同,给你8个点的数值,求方案数
先推出dp公式,f[i][1,2,3,4]表示从起点到i的方案数,总共有四种转移,然后再通过矩阵乘法快速求解即可
0018
一开始给你13张牌,问再有什么牌就可以win
首先枚举一下牌,然后在搜索就可以
Group D
0019
先求最小生成树,进行一次Kruskal,然后用LCA倍增法,维护四个数组就可以了
0020
就是有一堆怪物,一些是普通怪一些是老boss,打普通怪可以得到buff,老boss如果集齐5个buff可以获得宝物一个,打boss的时候可以嗑药
求在掉最多宝物的情况下要嗑多少药。难道被EOF给卡TLE了- -
对于每一个老boss通过dp进行预处理,可以通过dp进行预处理,计算pk所需要的嗑药量,共三种转移,然后在进行主dp即可,单调队列维护一下
0021
裸的凸包
0022
这道题目规则好多- -英文看起来好乱
按照规则进行模拟,用递归处理就可以了。
0023
比赛的时候就卡在这道题目上了 - -
构造可以通过贪心的方法,从右到左进行贪心。之后,二分答案,再通过贪心的方法,这次从左到右把货物放入货仓中
0024
这道题目不会做,看了一下出题的KT学姐的解题方法
首先用栈处理出每个木块向左或者向右能够推倒的最远距离lefti和righti。然后再动态规划求解。f[i]表示1-i个骨牌全被推倒并且第i个向左倒最少推几个,
g[i]表示1-i个骨牌全被推倒并且第i个向右倒最少推几个。转移时,平方级的枚举很好想,但是复杂度太高,所以我们需要用到数据结构来维护。用线段树来维护最小值。最后的ans=min(f[n],g[n])。