欢迎光临散文网 会员登陆 & 注册

第一届NjtechCPC题解

2023-03-19 16:30 作者:全氮阴离子  | 我要投稿

1.    洋洋的小目标

Tip: 1.正如题目所述 输出“洋洋的小目标”,考察点:“hello world!”

参考代码:

2.    洋洋的基因锁

Tip:1.简单的比较后计数,考察点:字符串,简单的循环和分支结构

参考代码:


3.    洋洋的舞会

Tip:1.将来宾作为一个节点考虑,相互认识关系为无向边,这样所有来宾就构成了一个图,考虑其中的数个极大连通子图,对于一个节点数为n的极大连通子图能使得热烈度放大

k^(n-1)倍

2.容易发现,实际上无需保存每个节点之间的连接关系,只需要知道哪些点之间是相通的即可,使用并查集可以避免图论解法带来的复杂数据结构

3.注意数据很大,使用64位或更高的数据类型来保存,并且每次乘法操作后对1000000007求余

4.考察点:贪心法,并查集,图论,稀疏图存储(链式前向星),深度优先搜索,宽度优先搜索,基本数论常识

参考代码:


4.    洋洋的决斗

Tip:   1.双方依次插入当前不在集合中的奇数/偶数的最小值,到最后检查奇数的最小值小还是偶数的最小值小即可判断胜利者

2. 注意,如果使用暴力解法,你的时间复杂度可能是由于n最大为1e5,你可能会得到TLE,使用快速排序,指针,二叉搜索树,空间换时间等方式来将时间复杂度优化至可以接受的程度

3. 考察点:博弈论,时空优化

参考代码:

5.    NO ONE WIN!

Tip:      1.由于总的血量分配方案数容易计算,所以既可以直接算无人获胜的方案,也可以计算有人获胜的方案然后从总数中扣除

              2.当采用计算有人获胜的方案时,容易想到,获胜时场上剩下一个人,这个人的血量可以为任意值,当血量为j时,此种情况对应了唯一一种血量状态,该状态为对应的有人获胜的分配方案的最后一回合的状态,反推出前一个回合能够造成k点伤害(即场上剩余k+1人时),最大血量为k+j情况可以有几种不同的状态到该最终状态

              3.由于出现了当前条件推导下一状态,且无回溯性的明显特性,显然本题采用动态规划算法解题

              4.当采用计算有人获胜方案数的解法时有DP[i][j],“i”代表当前剩余人数“j”代表当前场上最大血量

初始化:dp[1][j]=1剩余状态为0

动态规划递推公式为:

dp%5Bk%2B1%5D%5Bj%2Bk%5D%20%3D%20dp%5Bk%2B1%5D%5Bj%2Bk%5D%20%2B%20dp%5Bi%5D%5Bj%5D%20%5Ctimes%20%20%20C_%7Bk%2B1%7D%5Ei%20%5Ctimes%20x%5E%7Bk%2B1-i%7D%20%20

ps:C为组合数k为上个回合扣掉的血量

              5.考察点:动态规划,基础数论

参考代码:


第一届NjtechCPC题解的评论 (共 条)

分享到微博请遵守国家法律