2016.11.05【初中部 NOIP提高组 】模拟赛C

来源:互联网 发布:普通笔记本装mac系统 编辑:程序博客网 时间:2024/06/16 02:14

T1:设f[i]表示到i个烽火台而且第i个台必选的最小代价。则f[i]=min(f[j])+a[i](i-m<=j<=i-1).因为在i-1到i-m中至少选一个才能符合要求。但这样会超时,所以我们要用一个堆来维护f[i-1至i-m]的最小值。

T2:这一题的整解是水法.用s[i]表示a[1]到a[i]的和,求出s之后用二重循环枚举所选择序列的开头和结尾,然后判断这一段的和是否是n的倍数,如果是则输出。



T3:用f[i][j]表示前第i个村庄选了j个邮局,且第i村庄必选的最小花费。则我们要用一个k来枚举1到i-1之间的村庄,表示k到i之间的村庄都不选,那么就可以求出f[i][j]。
以下是两个优化:
1、用前缀和优化
2、因为序列是递增的,所以不用使用前缀和。


T4:先把所有的a[i],b[i]化成互质,然后把所有的b[i]分解质因数,再把相同的质因数乘起来,再转成16进制就行了,但是要用高精度。
这题有几个要注意的地方:
1、b[i]有可能包含一个十分大的质因数,所以我们在分解完质因数的时候,要再把b[i]乘上(一直被这个地方卡了很久)。
2、在分解质因数之前,要用线性筛法筛出质数,范围是300000以内(在这个地方也卡了一下)。
这题有一个值得学习的地方:在转16进制的时候,如果高精度之后再转,会有许多细节问题。我们可以把高精度中的mod 10,/10改成mod 16,/16就行了,不必单独转换。



0 0
原创粉丝点击