Day3总结

· 2026-7-16 17:34:59

T1: 将最大数变为1再排序,输出就是答案。

T2: 题目大意:给一个序列a,有一种操作,可以使ai+1的同时aj-1,问最后有多少个元素相等

思路:每次操作后,序列的和不变。sum不变,最多的元素相同,就是要使sum平均的分到n个数上。

就有两种情况:sum%n==0答案就是n; sum%n!=0答案是n-1(把多出来的sum%n个都累到一个数上)

维护:sum为序列总和

正确性:在以上任意一种情况中,任意两个元素一个加一一个减一都会造成答案数量下降。

T3:

设该序列的和为sum。前缀和+子序列和+后缀和=sum,若子序列和>sum,则前缀和>=0,后缀和>=0,前后个跑一遍,边跑边求和,看过程中是否会出现大

=0的情况若有则NO,完全没有则0.

T4:

尽量往左挪,给后面留下更多空间。

T5:

题目大意:对怪物的攻击首先由我发起a点伤害一次,然后敌人接着进攻一次造成b点伤害,交替进行,谁先干掉怪物,

如果我先干掉怪物,则ans++。技能是跳过敌方的一次回合,可以使用k次。

思路:贪心。我最后要干掉这个怪物并要使k花费最小,就要最大限度利用对手的伤害。

这样,最后我就只用处理 tmp=(h[i]-1)%(a+b)点伤害(h[i]若为(a+b)的倍数,利用这个小技巧就可以将余0转化为(a+b))。

那么,为了最后的攻击由我完成,这tmp点伤害要全部由我完成,也就是我要发动tmp/a(向上取整)-1次进攻(有一次进攻不用动用技能)。

计算完每次进攻的花费后,不能直接用k。因为打每只怪得的奖励都是1,所以我们将它存进一个数组里,排序后再从小往大取,尽最大可能用k。

正确性:若我扩大用k的范围,让敌人在怪物现在剩下的血-a-b>0时使用,就浪费了,因为不使用人头也不会被敌人抢走。

T6:

题目:n个任务,每个任务价值ai,每天只能做1个任务,做完后接下来k天都不可以做.给定两个整数c和d请你求出最大的k使得你在 d天内至少可以获得c个金币。如果不存在这样的k,输出 Impossible。如果 k可以任意大,输出 Infinity。

分析:在短时间内获得更多金币,就是要从大到小用。k越大,冷却时间越长,可选取的范围越广。若k不满足条件,就是不能在d天内搞到c个金币,那么k以上的就都不满足条件了。所以可以二分。

思路:二分k,算d天的和,与c作比较,移动l、r。最后l就是答案。

1 次查看 举报

0 条评论

目前还没有评论...

Be the first to comment!

返回讨论列表
徐廷蔚
107
通过题目
10
发帖数