[acwing周赛复盘] 第 120 场周赛20230909

总结

  • T1好难啊。
  • T1 数学
  • T2 dfs/数位dp
  • T3 计数贪心
  • 在这里插入图片描述

5146. 最大GCD

链接: 5146. 最大GCD

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 由于a<b,因此两数不同。它们还要公因子最大,那么最优是差个2。
  • 因此a,b分别是最大的偶数和它//2。

3. 代码实现

def solve():
    n, = RI()
    print(n//2)

5147. 数量

链接: 5147. 数量

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 由于每位只有2选择,且只有9位,那么可以直接dfs暴力枚举每一位上的数字。
  • 也可以数位dp

3. 代码实现


#       ms
def solve():
    n, = RI()
    s = str(n)

    @lru_cache(None)
    def f(i,is_limit,is_num):
        if i == len(s):
            return int(is_num)
        up = int(s[i]) if is_limit else 9
        down = 0 if is_num else 1
        ans = 0
        if not is_num:
            ans += f(i+1,False ,False)
        for j in [4,7]:
            if down <= j <= up:
                ans += f(i+1,is_limit and j == up, True)
        return ans
    print(f(0,True,False))

5148. 字符串匹配

链接: 5148. 字符串匹配

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 计数贪心。由于t的位置是随便调整的,因此优先保留能和s完全匹配的字符;然后保留普通匹配的字符。
  • 对s中每个字符优先匹配相同的,然后匹配大小写不同的。

3. 代码实现

def solve():
    s, = RS()
    t, = RS()
    a,b = Counter(s),Counter(t)
    x = y = 0
    for c in string.ascii_letters:
        p = min(a[c],b[c])
        x += p
        a[c] -= p
        b[c] -= p
    for c in string.ascii_lowercase:
        y += min(a[c],b[c.upper()])
    for c in string.ascii_uppercase:
        y += min(a[c],b[c.lower()])
    print(x,y)

六、参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值