Codeforces Round 942 (Div. 2) (A - D)

A. Contest Proposal#

如果 ai>bi,则答案加一,令 i[i+1,n], aiai1

submission

B. Coin Games#

题意:n 枚硬币围成一圈,给出初始硬币状态,每取出一枚正面朝上的硬币并翻转相邻的两枚,没有正面则对方获胜,问先手胜负。

令当前正面硬币数为 cur

  • UUUcur3
  • UUDcur1
  • DUDcur+1

每一次操作都会改变 cur 的奇偶性,先手获胜当且仅当在第偶数次操作时 cur=0,所以当初始 cur 为奇数时先手必胜,否则后手必胜。

submission

C. Permutation Counting#

题意:现有 ai 个数字 i,你可以新添 k 个数字,问这些数字组成的序列中最多几个排列。

先考虑 k=0

a 排序使得 a1a2an,并让 ai 对应的数为 xi

x1,x2xn 的顺序往下填能使任意长度为 n 的字串是排列,一定最优。

  • 填满 xn 个如上循环节。
  • 继续填 x1,x2,xn1,再往后不可能再出现排列(xn 没了)。

此时的排列数为 nan1

如果 an1=an 呢,那么 xn2 后就不能填了,以此类推。

最后答案为 nan[ai=an]


先往里新增 k 个数。

注意到只有改变最小值才会产生贡献。

an+1 带来的影响大于 [ai=an] 的影响,所以二分最小值,若 k 有剩余,再去减小 [ai=an]

submission

D1. Reverse Card (Easy Version)#

题意:求 a=1nb=1m[bgcd(a,b)a+b]

bgcd(a,b)a+bba

不妨枚举 a=bi,此时 gcd(a,b)=b

bgcd(a,b)a+bbi+1

所以答案为

b=1mi=1nb[bi+1]

后面一部分即求 [2,nb+1] 有多少 b 的倍数,直接算 nb+1b[b=1]

时间复杂度 O(m)

submission

D2. Reverse Card (Hard Version)#

题意:求 a=1nb=1m[a+bbgcd(a,b)]

不妨设 gcd(a,b)=i, a=pi, b=qi,有 gcd(p,q)=1

那么 p+qqi

又因为 gcd(p,q)=1,所以 p+qi

于是问题转化为

p=1nq=1m[gcd(p,q)=1]p+qi[i(p+q)min(n,m)][pin][qim]

注意到 p<i, pi<n,所以 p2<n

直接枚举 gcd(p,q)=1,计算 min(min(n,m)p+q,np,mq)

submission

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