==【题解】==
1、烤面包
分情况讨论:
当n<=k时,直接输出2;
当n>k时:
若 n%k==0 时,答案为n/k*2;
若 n%k>0且 n%k<=k/2, 最后的k片面包和余下的n%k片面包,采用样例的第2组数据解释的策略进行,答案为(n/k-1)*2+3
若 n%k>k/2, 最后余下的n%k面包,需要两次,答案为 n/k*2+2
2、逃脱
60分:
枚举每个障碍物区间x[i]..x[i+1],判定其是否能逃脱!
判定区间 [l,r](初值为l=i,r=i+1) 能否逃脱,模拟左冲右突过程即可:
时间复杂度:O(N*N)
100分:
设L[i]表示区间x[i]..x[i+1]能向左冲击到的最靠左的障碍物编号,则在模拟左冲右突时,可以引用L[i]的值,从而加速!
3、社交距离
二分距离mid(答案区间为1..10^18),然后按贪心指定每个精灵的位置,计算出在社交距离不小于mid的情况下,最多可以放置多少个精灵t,如果t<N,则mid太大,下次mid应该减小,否则可以继续往大猜!
贪心计算最多可以放置的精灵数:把所有食物区间按左端点由小到大排序,指定第一个区间的左端点放置一个精灵,且记下位置p和当前区间i,对于p+mid<=A[i].b,则在第i个区间继续放置一个精灵,否则,考察下一个区间i++,如果p+mid<=A[i].a,则在新区间的开头放置一个精灵,然后继续……,知道把M个区间考察完毕!
4、不会输
贪心+动规
贪心得到答案序列:对于每个回合,能猜偶数就猜偶数,不能猜偶数,再考虑猜奇数,若猜奇数也不行,则会输掉比赛,输出-1。
现在关键是如何判定第i个回合猜偶数还是奇数,甚至猜奇数也会输掉比赛!
这里动态规划预处理:
设f[i][0]表示当第i回合猜偶数时,小沐完成i~N的所有回合需要的最少金币数
同理f[i][1]表示当第i回合猜奇数时,小沐完成i~N的所有回合需要的最少金币数
显然:f[N+1][0]=f[N+1][1]=1
对于f[i][0],因为猜的是偶数,所以:
当第i回合小苇能出的数全是偶数,则她会出示最小的偶数,设为a[i][1],此时
f[i][0]= max(1,min(f[i+1][0],f[i+1][1])-a[i][1])
当第i回合小苇能出的数中包含有奇数,则她会出示最大的奇数,设为a[i][j],此时
f[i][0]= min(f[i+1][0],f[i+1][1])+a[i][j]
对于f[i][1] 做类似的处理。
有了上面f[i][0]和f[i][1],则
第i回合能猜偶数的条件是:M>=f[i][0](N表示剩下的金币数),能猜奇数的条件是M>=f[i][1]。两个都不能猜,则小沐会输掉比赛。
- 状态
- 已结束
- 规则
- OI
- 题目
- 6
- 开始于
- 2024-10-07 12:00
- 结束于
- 2024-11-18 04:00
- 持续时间
- 1000.0 小时
- 主持人
- 参赛人数
- 25