题解
程序在最后呀 ovo
A. 等价于给每个人尽量分配多的过题数。
答案是 min(ac,b) .
B. 注意到要求 "最短的回文子串(长度 > 1)", 那这就简单很多了。
情况只有两种 "aa" (长度 = 2), "aba" (长度 = 3)。
复杂度 O(n).
C 最多过几天,那就是要让每天选择不舒适度最小的即可
注意到每次使用都会使不舒适度翻倍
那么对于每个口罩,被使用的次数 <logk 上界很松,总计算量 nlogk。
维护最小值可以使用堆 总复杂度 O(nlogklogn).
D 转化后就是求 (i,j),i<j且a[i]×a[j]>或<或=k 分别的个数。
考虑当前枚举到 下标 i
对于 j<i 且 a[i]×a[j]>k⇔a[j]>a[i]k.
对于 j<i 且 a[i]×a[j]=k⇔a[j]=a[j]k .
对于 j<i 且 a[i]×a[j]<k⇔a[j]<a[i]k .
那么就把 [1,i−1] 的数做一个数点问题就可以了, 树状数组或set都ok.
复杂度 O(nlogn).
E 迷宫问题, 用bfs + 数组记录剪枝即可,复杂度奇怪。
F 题目的意思是重排数位使得 n%375=0,n≤1030000.
注意到 n=∑i=0maxbitdi×10i , n%375=(∑i=0maxbitdi×(10i%375))%375.
举个例子
247965%375=(2×(105%375)+4×(104%375)+7×(103%375)+9×(102%375)+6×(101%375)+5×(100%375))%375
我们发现 ∀i>2,10i%375=250.
证明考虑归纳, 对于 i=3,1000%375=250 成立。
设 i=k,10k%375=250 成立
则 i=k+1,10k+1%375=(250×10)%375=250.
所以结论成立。
所以只需要枚举最后三位取值情况判断就可以了 也就是
设 S=d1+d2+...+dmaxbit.
等价于判断 ((S−di−dj−dk)×250+100di+10dj+dk)%375=0.
枚举值域以及注意前导0的情况, 复杂度 O(logn+103)
A : https://ac.nowcoder.com/acm/contest/view-submission?submissionId=49782231
B : https://ac.nowcoder.com/acm/contest/view-submission?submissionId=49782811
C : https://ac.nowcoder.com/acm/contest/view-submission?submissionId=49783522
D : https://ac.nowcoder.com/acm/contest/view-submission?submissionId=49785483
E : https://ac.nowcoder.com/acm/contest/view-submission?submissionId=49798093
F : https://ac.nowcoder.com/acm/contest/view-submission?submissionId=49789385