(P1053 NOIP2005 提高组) 篝火晚会 - 洛谷 解析
(P1053 NOIP2005 提高组) 篝火晚会 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目类型:
模拟
解题:
题目坑项:
命令不需要是严格递增的
题目中(b1,b2,...bm−1,bm) 表示b1->b2, b2->b3,...., bm-1->bm, bm->b1
实际可以(b3,b2,b5,b7,b8)下命令,最优解是一个命令使所有人归位,如此命令代价为5
思路:
问题从计算最小代价转化为最大匹配人数
例:
正链
(1,2,3,4,5,6) ->(1,5,4,3,6,2)
取差(a-b+n)%n 其中 差值为负不是取绝对值,而是算溢出
(0,3,5,1,5,4)
其中 5 出现的次数最多,即原始顺序与目标顺序最大匹配的人数为5出现的次数2
(2,3,4,5,6,1)->(1,5,4,3,6,2)
取差
(1,4,0,2,0,5) 得b3和b5不用动
当前最佳命令为(b1,b6),(b2,b4)
当前最小价值为 4 = 人数 - 最大匹配人数
反链
还需判断(1,6,5,4,3,2)此反链情况
构建环判断:
1.判断数据逻辑是否可以构建
2.数据构建后的环是否有回路,首位判断
优化思路:
从构建环开始,构建后开始尝试模拟一次归位,发现这次归位最简单就是改变和初始环不同的位置,开始旋转初始环计算环中最大相同数的个数,每旋转一次需要遍历查看相同的个数,算法复杂度n*n,尝试寻找规律,开始计算差值看看是否有规律,发现差值相同的位置,旋转多少次差值都是相同,可以得出差值的值相同的位置最多的对应上就是环中匹配上最多的旋转方案,同时时间复杂度优化到n。最终加个逻辑存储差值个数最多的数,并遍历搜寻出来,最后通过最小代价 = 总人数 - 匹配人数 =需要改变的人数

浙公网安备 33010602011771号