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

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

    • 总结
    • 5146. 最大GCD
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 5147. 数量
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 5148. 字符串匹配
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

总结

  • T1好难啊。
  • T1 数学
  • T2 dfs/数位dp
  • T3 计数贪心
  • [acwing周赛复盘] 第 120 场周赛20230909_第1张图片

5146. 最大GCD

链接: 5146. 最大GCD

1. 题目描述

[acwing周赛复盘] 第 120 场周赛20230909_第2张图片

2. 思路分析

  • 由于a
  • 因此a,b分别是最大的偶数和它//2。

3. 代码实现

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

5147. 数量

链接: 5147. 数量

1. 题目描述

[acwing周赛复盘] 第 120 场周赛20230909_第3张图片

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. 题目描述

[acwing周赛复盘] 第 120 场周赛20230909_第4张图片

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)

六、参考链接

你可能感兴趣的:(acwing周赛复盘,python,算法)