第一届NjtechCPC题解
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
动态规划递推公式为:
ps:C为组合数k为上个回合扣掉的血量
5.考察点:动态规划,基础数论
参考代码: