Codeforces Round #905(Div.3)

A. Morning

题目

给定4位数字码,每位数字取值0-9。排列顺序如下: 

 初始光标指向1,每次可执行其中一个操作

        1、输出光标所指数字

        2、移动光标到相邻位置上。如3可移动到2或4,其中1只能移动到2,0只能移动到9。

问,需要进行多少次操作,能够得到给定的4位数字码。

输入

第一行为测试样例数t,取值范围1\leq t\leq 10^{4}

接下来t行,每行包含一个4位数字码

输出

输出t行,每行位得到此数字码需要的操作次数。

解析

 依次遍历4位数字,记录光标移动到当前数字的移动次数,累加即为结果。因为输出数字也是一次操作,故最后需要加上4。

代码


T = int(input().strip())

for t in range(T):
    n = input().strip()

    cur = 1
    res = 0
    for i in n:
        i = int(i)
        if i == 0:
            i = 10
        res = res + abs(i - cur)
        cur = i

    print(res+4)

B. Chemistry

题目

给定长度为n的字符串s,判断是否可以通过删除任意k的字符后,使s成为回文字符串。(删除k个字符后的s,可以任意排序)

输入

首行测试样例数t,1\leq t\leq 10^{4}.

每组数据第一行输入n和k,由空格隔开,0\leq k\leq n\leq 10^{5}.

第二行为长度为n的字符串s

输出

输出判断结果“YES”或“NO”,不区分大小写。

解析

 rank的时候没有注意剩余字符可以任意排序,卡了一个多小时,这就是菜吧。回文字符串,从前往后和从后往前相同,故回文字符串中出现的字符,其数量为奇数的个数不能超过1。(只有长度为奇数的回文字符,才有能出现某个字符出现次数为奇数)。故只需统计s中字符出现奇数次的个数,判断其是否小于等于k+1即可。

代码


T = int(input().strip())

for t in range(T):
    n, k = map(int, input().strip().split())
    s = input().strip()
    l = [0] * 26
    for c in s:
        l[ord(c) - ord('a')] += 1

    cnt = 0
    for i in l:
        if i % 2:
            cnt += 1
    if cnt - k <= 1:
        print("YES")
    else:
        print("NO")

C. Raspberries

题目

给定长度为n的数字序列,每个数字k取值2\leq k\leq 5。每次操作,可选择序列中任一数字a,将其加1。

问,最少需要多少次操作可使\prod_{i=1}^{i=n}a_{i}能够被k整除。

输入

首行测试样例数t,其中1\leq t\leq 10^{4}

每组第一行输入n和k,空格隔开。2\leq n\leq 10^{5}, 2 \leq k \leq 5.

第二行长度为n的数字序列,一次用空格隔开

输出

t行最小操作次数

解析

k的取值只有2,3,4,5。当序列中任一一个数字能够被k整除时,序列的乘积便能够被k整除。故对于2,3,5素数,最优策略是将单个数字增加到能被k整除。

对4而言,有两种策略,一种同上。另一种,将两个数字增加到偶数,序列乘积便可被4整除。如果序列中偶数个数为cnt,则第二种策略的答案为max(0, 2-cnt)。从两种策略中选择最小值即可。

代码


T = int(input().strip())

for t in range(T):
    n, k = map(int, input().strip().split())
    b = k
    a = list(map(int, input().strip().split()))
    a.sort()

    res = 6
    even = 0
    for i in a:
        if i % 2 == 0:
            even += 1
        while i > k:
            k += b
        dis = k - i
        if dis < res:
            res = dis

    if b == 4:
        if n >= 2:
            res = min(res, max(0, 2-even))

    print(res)
    

第一次做CF,挑了个难度最低的,就做出来两个题,C还提交错了两次(扣了100)。总的来看div3前面题目的难度并不大,首次做全英文的题目会忽略掉一些关键条件。C的错误也是因为循环中变量命名习惯不好,慢慢纠正吧,看下次拿几分。

rank分多了400,成功从CF晋级为CF,o(╥﹏╥)o。

(另,解析里图片部分为出题人解答) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Codeforces Round 894 (Div. 3) 是一个Codeforces举办的比赛,是第894轮的Div. 3级别比赛。它包含了一系列题目,其中包括题目E. Kolya and Movie Theatre。 根据题目描述,E. Kolya and Movie Theatre问题要求我们给定两个字符串,通过三种操作来让字符串a等于字符串b。这三种操作分别为:交换a中相同位置的字符、交换a中对称位置的字符、交换b中对称位置的字符。我们需要先进行一次预处理,替换a中的字符,然后进行上述三种操作,最终得到a等于b的结果。我们需要计算预处理操作的次数。 根据引用的讨论,当且仅当b[i]==b[n-i-1]时,如果a[i]!=a[n-i-1],需要进行一次操作;否则不需要操作。所以我们可以遍历字符串b的前半部分,判断对应位置的字符是否与后半部分对称,并统计需要进行操作的次数。 以上就是Codeforces Round 894 (Div. 3)的简要说明和题目E. Kolya and Movie Theatre的要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Codeforces Round #498 (Div. 3) (A+B+C+D+E+F)](https://blog.csdn.net/qq_46030630/article/details/108804114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Codeforces Round 894 (Div. 3)A~E题解](https://blog.csdn.net/gyeolhada/article/details/132491891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值