NOIP2016普及组正式赛

本文介绍了算法竞赛中的四种典型解题思路:直接计算、枚举法、队列存储及后缀和优化方法。针对不同问题场景提供了高效解决方案,并详细阐述了如何通过枚举和优化策略来提高算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T1:直接计算


T2:枚举法


T3:因为一共得人数不超过100000,所以我们可以用一个队列存储来访人得国籍,然后记录下每一船的尾指针。在求一个ans时,把所有的与当前时间相差86400秒以上的船去掉,当前船加上就行了。


T4:这题要先化简公式后可得出:

设CD之间的距离为i,则AB之间的距离为2i,BC之间的距离为6i+k(k>0)。

85分做法:

首先存储每一个魔法值有多少个魔法道具,设为w[i]。

然后枚举ABC三个数的位置,算出D,判断是否符合条件,符合则保存下来,保存方法如下:

ans[A][1]+=(w[B]*w[C]*w[D]);

ans[B][2]+=(w[A]*w[C]*w[D]);

以此类推。

100做法:

我们只需枚举i,A,就可以求出ans[A],ans[B]。我们只要知道i和A,就可以求出B,那么C,D有多少种可能呢?只是我们后缀和解决。设s[l]表示但长度为i时l到n之间CD的对数,则s[l]=s[l+1]+w[l]*w[l+i]。那我们设A的值为j,则ans[A][1]+=(w[B]*s[j+i*8+1])。因为C的最小值是A+i*8+1。ans[B]+=(w[A]*s[j+i*8+1])。

求CD的做法跟AB一样,只不过要用前缀和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值