首页 > 编程语言 >第七届传智杯初赛第二场(abc三组)补题+题解python

第七届传智杯初赛第二场(abc三组)补题+题解python

时间:2025-01-15 16:32:20浏览次数:3  
标签:max 题解 初赛 range 补题 ans input mod

文章目录


前言


在CSDN上并未找到第七届传智杯初赛第二场的相关题解,于是自己写了一个供大家参考。
附上补题链接 点此进入https://ac.nowcoder.com/acm/contest/100449#question


A 计算商品打折结算金额(B组、C组)


在这里插入图片描述


思路分析:

通过f-string格式化输出(python3.6以上)

题解:

n = float(input())
if n >= 5000:
    ans = n * 0.6
elif n >= 2000:
    ans = n * 0.7
elif n >= 500:
    ans = n * 0.8
elif n >= 100:
    ans = n * 0.9
else:
    ans = n
print(f"{ans:.1f}")

B 茶杯和球(A组、C组)


在这里插入图片描述

在这里插入图片描述


思路分析:

将球所在的杯子打上标记即可

题解:

n, x, k = map(int, input().split())
a = [0] * n
a[x - 1] = 1
for _ in range(k):
    i, j = map(int, input().split())
    a[i - 1], a[j - 1] = a[j - 1], a[i - 1]
print(a.index(1) + 1)

C 游游的字母串(A组、B组、C组)


在这里插入图片描述

思路分析:

仅包含小写字符串,最后所有元素要求变成相同的。因为只有26种情况,不妨从答案入手,逆向解题:
遍历从a到z,通过check函数返回需要的次数。

题解:

from math import inf

s = input()
ans = float(inf)


def check(x):
    sum = 0
    for i in s:
        res = abs(ord(i) - x)
        if res > 13:
            res = 26 - res
        sum += res
    return sum


for i in range(97, 123):
    ans = min(ans, check(i))


D 电梯(B组、C组)


在这里插入图片描述

在这里插入图片描述

思路分析:

简单的模拟题:sum1和sum2分别表示两个电梯各自的时间

题解:

n = int(input())
a = list(map(int, input().split()))
sum1 = a[0] 
sum2 = a[1]  # 初始化
for i in range(2, n):
    if sum1 < sum2:
        sum1 += a[i]
    else:
        sum2 += a[i]
print(max(sum1, sum2))

E 小欧的排列计算(A组、B组、C组)


在这里插入图片描述
在这里插入图片描述

思路分析:

所有相邻两个数的乘积均为偶数 即两个奇数不会相邻
数学排列组合(插空法 )偶数排列完后将奇数插入空中 A(偶,偶)*C(偶+1,奇)*A(奇,奇)
涉及到的预计算阶乘、逆元求组合数可查看我的博客 [点此进入]

题解:

def pre(max_n, mod):  
    f = [1] * (max_n + 1)  
    i_f = [1] * (max_n + 1)  

    for i in range(1, max_n + 1):
        f[i] = f[i - 1] * i % mod

    i_f[max_n] = pow(f[max_n], mod - 2, mod)

    for i in range(max_n, 0, -1):
        i_f[i - 1] = i_f[i] * i % mod

    return f, i_f  

def comb(n, k, f, i_f, mod):  

    if k > n or k < 0:
        return 0
    return (f[n] * i_f[k] % mod * i_f[n - k] % mod) % mod

mod = 10 ** 9 + 7
n = int(input())
even = n // 2   # 偶数个数
odd = n - even  # 奇数个数
f, i_f = pre(n, mod)
c = comb(even + 1, odd, f, i_f, mod)
print(f[odd] * f[even] * c % mod) 


F 游游的字母子串(A组、B组、C组)


在这里插入图片描述

思路分析:

连续子串常常使用滑动窗口技术。
1.维护一个有条件的不定长滑动窗口;
2.右端点右移,导致窗口扩大,不满足条件;
3.左端点右移,为了缩小窗口,重新满足条件

种类不超过k可以使用哈希表(字典)统计个数实现
数据结构defaultdict相关用法 可见我的博客 点此进入

题解:

from collections import defaultdict

n, k = map(int, input().split())
s = input()
ans = left = 0
dict = defaultdict(int)  
for right in range(n):
    dict[s[right]] += 1
    while len(dict) > k:
        dict[s[left]] -= 1
        if dict[s[left]] == 0:
            dict.pop(s[left])
        left += 1

    ans = max(ans, right - left + 1)
print(ans)


G 跳跳跳(A组、B组)


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路分析:

动态规划:
环形跳跃的问题可以通过将环拆成一个线性问题来处理例如,如果选择从位置k作为起点,可以将备份a重新排为a[k], a[k+1], …, a[n], a[1], …, a[k-1]。

题解:

def solve(n, a):
    # 双倍长度的数组以便于线性处理环
    a = a + a
    dp = [[0] * (2 * n) for _ in range(2 * n)]
    # 初始化单格子的得分
    for i in range(2 * n):
        dp[i][i] = a[i] * n

    # 枚举长度从1到n-1
    for length in range(1, n):
        for l in range(2 * n - length):
            r = l + length
            step = n - (r - l)
            dp[l][r] = max(dp[l + 1][r] + step * a[l], dp[l][r - 1] + step * a[r])

    # 取 n 个连续格子的最大值
    max_result = 0
    for i in range(n):
        max_result = max(max_result, dp[i][i + n - 1])

    return max_result


n = int(input())
a = list(map(int, input().split()))
print(solve(n, a))

H 小红的战争棋盘(A组)


在这里插入图片描述
在这里插入图片描述
示例一:
输入:

3 3 2
ranko 1 1
kotori 2 2
5
ranko D
ranko W
ranko A
kotori W
kotori W

输出:

vanquish!
out of bounds!
peaceful.
ranko wins!
unexisted empire.

在这里插入图片描述

在这里插入图片描述

思路分析:

大模拟太麻烦哩,最后选择放弃。
有做出来的小伙伴可以留言讨论哦!

标签:max,题解,初赛,range,补题,ans,input,mod
From: https://blog.csdn.net/2401_87245677/article/details/145125527

相关文章

  • 信号与系统(郑君里)第一章-绪论 1-1 课后习题解答
    题目详情(1-1分别判断题图1-1所示各波形是连续时间信号还是离散时间信号,若是离散时间信号是否为数字信号?)答案解析:(a)连续信号模拟信号(b)连续信号量化信号(c)离散信号数字信号(d)离散信号抽样信号(非数字信号)(e)离散信号数字信号(f)离散信号数字信号tips:本道题目考察了连续/......
  • ABC 243题解
    ABC243A-C太水不写了。D题意:从完全二叉树上点\(X\)开始移动,每次移动至父节点、左子节点或右子节点。询问N次移动后所处节点,保证答案小于\(10^{18}\)。解法:忘了过程有可能超longlong浪费两分钟。总之就是每一个向父节点操作会消掉最近一个未消掉的向儿子移动操作,然后......
  • {LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度 题解
    \(\text{LOJ\#6041.「雅礼集训2017Day7」事情的相似度题解}\)解法一由parent树的性质得到,前缀\(s_i,s_j\)的最长公共后缀实质上就是\(i,j\)在SAM中的\(\operatorname{LCA}\)在SAM中的\(\operatorname{len}\)。让我们考虑如何处理\((l,r)\)区间内的询问。直......
  • Codeforces Round 992 (Div. 2) C题解析
    CodeforcesRound992(Div.2) C题解析题目描述......
  • P4770 [NOI2018] 你的名字 题解
    \(\text{P4770[NOI2018]你的名字题解}\)注意到\(l=1,r=|S|\)有整整68分的高分,让我们先来考虑这样的特殊情况。这样的特殊情形实际上要我们求的是\(t\)有多少个本质不同的子串满足其不是\(s\)的子串。正着做看上去有些困难,于是维护\(s,t\)的本质不同公共子串个数,用......
  • 嵌入式杂谈(问题解决一:使用HAL库时keil中代码的分区)
     如图,代码分区代码区域作用Privateincludes引入所需头文件,提供函数声明、类型定义和宏等Privatetypedef创建自定义数据类型,增强代码可读性与维护性Privatedefine定义常量和宏,方便代码修改与简化Privatemacro实现简单代码替换,简化代码逻辑Privatevariables声明和初始化......
  • 题解:AT_abc136_f [ABC136F] Enclosed Points
    传送门Solution对于一个点\(i\),我们将其与其它点匹配,故有\(2^{n-1}\)的方案数,这是答案的初始。对于每个点\((x_i,y_i)\)再建系,四个象限都可能会有点,我们此时考虑四个象限的点如何匹配,才能使\((x_i,y_i)\)包含其中,稍微手玩一下就可以发现,对于一四象限、二三象限的点匹......
  • 记录在虚拟机中达梦数据库DEM安装过程遇到的问题解决方法
    本篇博客是记录了在寒假课程设计中在虚拟机麒麟银河系统安装达梦数据库DEM遇到的各种刁钻问题的解决方法,希望同样遇到这些问题的小伙伴们能够在查看本篇博客后真正解决问题。废话不多说,直接往下看吧! dem服务器的安装与部署1、上传dem和tomcat压缩包2、./dminitpath=/d......
  • ABC382&ABC383题解
    [ABC382C]KaitenSushi题目描述有\(N\)个人,编号从\(1\)到\(N\),他们正在访问一家传送带寿司餐厅。第\(i\)个人的美食级别是\(A_i\)。现在,将会有\(M\)份寿司放置在传送带上。第\(j\)份寿司的美味度为\(B_j\)。每份寿司将按照顺序经过编号为\(1\),\(2\),\(\dots\),\(N......
  • [CCO2021] Through Another Maze Darkly 题解
    思路很牛,代码很难,故写题解记之。前置知识:线段树。洛谷题目链接:P7830[CCO2021]ThroughAnotherMazeDarkly。原题题面很简洁,故不赘述题意。观察(70%)读完题,这是什么东西。我们直接去手玩样例,然后发现几个很有用的信息:一个点被进入一次后,必然会指针朝上。一个点被进......