#introheuristicsc. [intro_heuristics_c]Incremental Scoring
[intro_heuristics_c]Incremental Scoring
请先阅读问题A。通过解决问题C,您可以获得的最高分数为1,对您的排名几乎没有影响。
初学者指南
"局部搜索"是一种找到高质量解决方案的强大方法。在这种方法中,我们不是从头开始构建解决方案,而是通过稍微修改已经找到的解决方案来寻找更好的解决方案。如果解决方案变得更好,则更新它,如果变得更糟,则恢复它。通过重复这个过程,解决方案的质量会随着时间的推移逐渐提高。伪代码如下所示。
solution = 计算初始解决方案(通过随机生成或应用其他方法,如贪婪法)
while 剩余时间 > 0:
稍微修改解决方案(随机地)
如果解决方案变得更差:
恢复解决方案
例如,在这个问题中,我们可以使用以下修改:随机选择日期和比赛类型,并将日期上要举行的比赛类型更改为。伪代码如下所示。
t\[1..D\] = 计算初始解决方案(通过随机生成或应用其他方法,如贪婪法)
while 剩余时间 > 0:
随机选择 d 和 q
old = t\[d\] # 记住原始值以便稍后恢复
t\[d\] = q
如果解决方案变得更差:
t\[d\] = old
当使用局部搜索方法时,最重要的事情是如何修改解决方案的设计。
- 如果修改量太小,我们很快就会陷入死胡同(局部最优解),相反,如果修改量太大,则找到改进移动的概率极小。
- 为了增加迭代次数,希望能够在应用修改后快速计算分数。
在问题C中,我们将重点放在第二点上。修改后的分数可以通过从头开始计算分数来获得。然而,仅关注已修改部分可能可以快速计算修改前后分数之间的差异。从另一个角度来看,这种快速增量计算的不可能性意味着对解决方案的小修改影响了大多数分数计算。在这种情况下,我们可能需要重新设计如何修改解决方案,或者问题可能不适合局部搜索。让我们实现快速增量分数计算。现在是展示您在ABC和ARC中开发的算法和数据结构技能的时候了!
在这种类型的比赛中,目标是寻找更好的解决方案而不是最优解决方案,程序中的一个错误不会导致错误答案,这可能会延迟对错误的发现。为了早期发现错误,最好对您实现的复杂例程进行单元测试功能。例如,如果您实现了快速增量分数计算,建议测试一下快速实现计算的分数是否与从头计算的分数相匹配,就像我们在问题C中要做的那样。
问题描述
给定天的比赛安排和个修改日程安排的查询。在第个查询中,给定整数和,将在第天举行的比赛类型更改为,然后输出更新后日程安排在第天结束时的最终满意度。请注意,我们不会撤销每个查询。也就是说,第个查询应用于由第个查询获得的新日程安排。
输入
输入以问题A的标准输入形式给出,后跟问题A的输出和查询。
- 输入部分的约束条件和生成方法与问题A相同。
- 对于每个,是从中独立均匀随机生成的整数。
- 查询数量是满足的整数。
- 对于每个,是从中独立均匀随机生成的整数。
- 对于每个,是满足且与第天比赛类型不同的个整数中均匀随机生成的整数。
输出
设是应用第个查询之后,在第天结束时日程安排上的最终满意度。请以以下格式将个整数打印到标准输出:
示例输入1
5
86 90 69 51 2 96 71 47 88 34 45 46 89 34 31 38 97 84 41 80 14 4 50 83 7 82
19771 12979 18912 10432 10544 12928 13403 3047 10527 9740 8100 92 2856 14730 1396 15905 6534 4650 11469 3628 8433 2994 10899 16396 18355 11424
6674 17707 13855 16407 12232 2886 11908 1705 5000 1537 10440 10711 4917 10770 17272 15364 19277 18094 3929 3705 7169 6159 18683 15410 9092 4570
6878 4239 19925 1799 375 9563 3445 5658 19857 11401 6997 6498 19933 3848 2426 2146 19745 16880 17773 18359 3921 14172 16730 11157 5439 256
8633 15862 15303 10749 18499 7792 10317 5901 9395 11433 3514 3959 5202 19850 19469 9790 5653 784 18500 10552 17975 16615 7852 197 8471 7452
19855 17918 7990 10572 4333 438 9140 9104 12622 4985 12319 4028 19922 12132 16259 17476 2976 547 19195 19830 16285 4806 4471 9457 2864 2192
1
17
13
14
13
5
1 7
4 11
3 4
5 24
4 19
示例输出1
72882
56634
38425
27930
42884
请注意,此示例是用于检查问题规范的小示例。它不满足约束条件,并且实际上从未作为测试用例给出。