Educational Codeforces Round 80 (CF1288)

Educational Codeforces Round 80 (CF1288)

A. Deadline

题意

给出正整数 n,d,求不等式 x+dx+1n 是否有非负整数解。

思路

先不考虑上取整,

x+dx+1=x+1+dx+112d1

当且仅当 x+1=dx+1x=d1 时取得最小值。

我们只需要判断最小值是否小于 n 即可。

加上上取整后,最小值一定在 x=d1d1 时取到。

只用代入并判断是否成立即可。

B. Yet Another Meme Problem

题意

给出正整数 A,B,求有多少对 (a,b)(1aA,1bB)

满足 a×b+a+b=conc(a,b)conc(a,b) 表示 a,b 拼接后形成的数。

思路

conc(a,b)=10log10b+1a+b

左右同减 b 得:

a×b+a=10log10b+1a

同除 a 得:

b+1=10log10b+1

b 就等于 9,99,999,,容易发现 n 以内这些数的个数为 log10(n+1)

对于这些 b,所有 a 都能与它们配对,所以答案为:

log10(B+1)×A

C. Two Arrays

题意

给出正整数 n,m,求数列 (A,B) 的个数,满足:

|A|=|B|=m1AiBinA 不减,B 不增。

答案对 109+7 取模。

思路

定义 dpi,j,k 表示考虑前 i 个位置,Ai=j,Bi=k 的方案数。

答案为 i=1nj=indpm,i,j

转移方程:

dpt,i,j=k=1il=jndpt1,k,l

状态数 O(mn2) 转移 O(n2),总时间复杂度 O(mn4),考虑优化。

发现转移可以使用二维前缀和优化至 O(1) (左上角 (1,j),右下角 (i,n) 的矩形和),总时间复杂度 O(mn2)

D. Minimax Problem

题意

给出正整数 n,m,和 n 个长度为 m 的序列。

可以选择两个序列 i,j 组合出新的序列 b 满足 bk=max(ai,k,aj,k)

minbi 的最大值。

思路

看到最小值最大可以想到二分。

考虑二分答案 x,根据题意,ai,kaj,k 中至少有一个大于等于 x

又看到 m8 可以想到装压,把每个序列压成一个 m 位二进制数 S

i 位代表 ai 是否大于等于 x

两个序列满足答案即 Si or Sj=2m1

显然无法直接枚举两个序列,可以转化为枚举两个状态并判断是否存在。

时间复杂度:O(logW(nm+4m))

E. Messenger Simulator

题意

给出正整数 n,m 和长度为 m 的序列 A

有长度为 n 的序列 B,初始时 Bi=i

对于每个 Ai,把 BAi 移动到第一位。

求每个数在 B 中出现过的最大位置和最小位置。

思路

在序列开头插入,会使部分数的位置改变,不便于维护。

由于插入的次数固定为 m,我们可以先在 B 序列前预留 m 个空位出来插入。

A1Amm1 倒着插入。

这样确实方便了插入,但查询数的真实位置(去除空位)变得复杂。

数的真实位置为该数在 B 序列中的位置及前面位置中数的个数,用树状数组维护。

插入数和维护树状数组的同时更新答案。

时间复杂度:O(n+mlog(n+m))

posted @   maniubi  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示