[CoderChef复盘] START86 div4 20230419】

news2024/11/15 19:42:08

[CoderChef复盘] START86 div4 20230419

    • 一、本周周赛总结
    • P1 CodeChef Learn Problem Solving
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • P2、Cricket Match
      • 2. 思路分析
      • 3. 代码实现
    • P3 Chef and Battery
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • P4 Maximise Score
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • P5 String Game
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • P6 Largest Y
      • 2. 思路分析
      • 3. 代码实现
    • P7 Minimum Operation
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

一、本周周赛总结

  • 第一次打CC只能打DIV4.
  • P1P2模拟。
  • P3 BFS。
  • P4 贪心。
  • P5 计数讨论。
  • P6 二进制贪心。
  • P7 质因数分解贪心。
  • 在这里插入图片描述
  • 在这里插入图片描述

P1 CodeChef Learn Problem Solving

链接: CodeChef Learn Problem Solving

1. 题目描述

在这里插入图片描述

  • 输入n种语言,每种语言有两门课,一共几门课?

2. 思路分析

  • 模拟。

3. 代码实现

print(int(input())*2)

P2、Cricket Match

在这里插入图片描述

  • 板球比赛每轮包括6球,每球能赢6分。
  • 需要n分才能赢,还剩m轮,问能不能赢。

2. 思路分析

  • 模拟

3. 代码实现

#       ms
def solve():
    n,m = RI()
    if n <= m*6*6:
        print('YES')
    else:
        print('NO')

P3 Chef and Battery

链接: Chef and Battery

1. 题目描述

在这里插入图片描述

  • chef的手机还剩n%电。
  • 每分钟手机电量如下变化:
    • 如果手机在充电,会涨2%。
    • 否则,会掉3%.
  • 问:Chef最少要用几分钟可以使手机电量到达正好50%。
  • 注意手机电量必须在范围[0,100]闭区间。

2. 思路分析

  • 这题有点问题,最开始我以为手机在1%电,可以掉一分钟到0%。提交上去WA了。
  • 过的代码如下,1%的手机必须充电,不可以掉电。
  • 就离谱。

  • 另外,这题直接while贪心模拟也可以,手机<50则冲>50则掉。

3. 代码实现

# Problem: Chef and Battery
# Contest: CodeChef - START86D
# URL: https://www.codechef.com/START86D/problems/FIFTYPE
# Memory Limit: 256 MB
# Time Limit: 1000 ms

import sys
from collections import *

RI = lambda: map(int, sys.stdin.buffer.readline().split())
RS = lambda: map(bytes.decode, sys.stdin.buffer.readline().strip().split())
RILST = lambda: list(RI())
DEBUG = lambda *x: sys.stderr.write(f'{str(x)}\n')


#       ms
def solve():
    n, = RI()
    if n == 50:
        return print(0)
    t = 0
    vis = {n}
    q = deque([n])
    while q:
        t += 1
        for _ in range(len(q)):
            u = q.popleft()
            for v in u - 3, u + 2:
                if v == 50:
                    return print(t)
                if v < 0 or v > 100:
                    continue
                if v not in vis:
                    vis.add(v)
                    q.append(v)


if __name__ == '__main__':
    t, = RI()
    for _ in range(t):
        solve()

P4 Maximise Score

链接: Maximise Score

1. 题目描述

在这里插入图片描述

  • AB玩游戏,输入n和长为n的数组a。
  • A选一个下标i,B选i相邻的下标,最后分数为abs(a[i]-a[j])。
  • A目的是让分数小,B目的是让分数大。

2. 思路分析

  • 看起来是博弈,其实是2次贪心。
  • 首先A一定可以选0或n-1,这样B没有操作空间,答案必是前两个数或后两个数的差。
    • 即可以初始化为ans = min(abs(a[0]-a[1]),abs(a[-1]-a[-2]))
  • 然后枚举A可以选择的剩下位置i in range(1,n-1),B一定可以选择两边的差中最大的那个。
    • 那么A只要尝试从最大值里选最小。

3. 代码实现

def solve():
    n, = RI()
    a = RILST()
    ans = min(abs(a[0]-a[1]),abs(a[-1]-a[-2]))
    for i in range(1,n-1):
        x = max(abs(a[i]-a[i-1]),abs(a[i]-a[i+1]))
        ans = min(ans,x)
    print(ans )

P5 String Game

链接: String Game

1. 题目描述

在这里插入图片描述

  • 输入一个二进制串S。
  • AB在S上玩游戏。每轮操作:
    • 当前玩家可以选一个s[i]!=s[i+1]的位置,删除这两个字符。
  • 无法操作的玩家输。

2. 思路分析

  • 看起来又是博弈。
  • 统计01出现次数cnt=Counter(s)。
  • 显然若一开始就没有01相邻出现,A肯定输。
  • 若有01出现,每次删除会同时删除01各一次,且剩下的串若有01,必然可以继续操作。
  • 那么一共可以删除的次数就是01次数里的最小值。
  • 这个次数是奇数则A赢;否则B赢。

3. 代码实现

def solve():
    n, = RI()
    s, = RS()
    cnt = Counter(s)
    if len(cnt) != 2:
        return print('Ramos')
    x = min(cnt.values())
    if x&1:
        print('Zlatan')
    else:
        print('Ramos')

P6 Largest Y

链接: Largest Y在这里插入图片描述

  • 输入n,x和长为n的数组a。题目保证a中至少有2个不同的元素。(2<=n<=1e5);(x,a[i]<=2^30,)
  • 你可以选择一个数y(y<=x),构造数组b,其中b[i]=a[i]|y。即a中每个数或上y。要求b也至少有2个不同元素。
  • 求最大的y。

2. 思路分析

  • 二进制贪心,幸好做出来了。
  • 考虑b中数据,所有b[i]中,只要有一位存在不同值,既有0也有1,则b就满足要求。
  • 从低到高枚举每一位,check a中当前位是否存在不同值,若存在,只需要y的当前位是0,则b中对应的这个位不会变,即满足要求。若第i位满足:
    • 查看x中第i位是否是0,若是0,x本身就可以作为答案,因为要求y<=x,不可超过x。
    • 若x中第i位是1,尝试把这位变成0,b就满足了;为了使答案尽可能大,使低于i的位全变1,高于i的位不变。

  • 这里有个问题,需要计算a中第i位是否存在不同值,怎么写更方便。
    • 我采用的是每一位创建set的写法,把这位加入set,看set长度是不是2。
    • 注意,到达2时,就可以进行答案计算了;并且由于是从低到高枚举,其实它已经是变1操作的最大值了。
    • 但是不可以return,只能break掉枚举当前位的操作。这是因为:后边还有可能有的位x本身就是0,这才是最大的。
  • 因此其实可以把两种情况分开,都只需要判断一次就跳出。
  • 所以可以采用sovle1的写法:
    • c = reduce(ior, a) d = reduce(iand, a) e=c-d
    • c是a位或起来,所有有1的位置是1;d是a位于起来,所有只有1的位置是1。
    • 那么e就是a中同时有1和0的位置。其他位置都是0。
    • x&e若==e,代表e中所有1的位置在x里也是1;否则必有一个e中的1,在x里是0,位于才会修改e。这时就可以直接用x。
    • 否则找最低的位直接计算答案即可,这里也可以优化。
    • 由于我们目的是把x位上的这个1变成0,后边的全变1。那么可以把后边先全变0,然后直接x-=1。
    • 后边全变0的操作可以直接减去对这个2次幂取模的值。具体见代码。

3. 代码实现


def solve():
    n, x = RI()
    a = RILST()
    c = reduce(ior, a)
    d = reduce(iand, a)
    e = c - d
    if (x & e) != e:
        return print(x)
    for i in range(31):
        if e >> i & 1:
            x -= x % (1 << i)
            return print(x - 1)


def solve1():
    n, x = RI()
    a = RILST()
    ans = 0
    for i in range(31):
        p = set()
        for v in a:
            z = (v >> i) & 1
            p.add(z)
            if len(p) == 2:
                if (x >> i) & 1:
                    ans = max(ans, (x ^ (1 << i)) | ((1 << i) - 1))
                    break
                else:
                    return print(x)
    print(ans)

P7 Minimum Operation

链接: Minimum Operation在这里插入图片描述

  • 输入n,m和长为n的数组a,其中2<=a[i]<=m。
  • 每步操作你可以:
    • 选择一个x(2<=x<=m) 把所有a[i]替换成gcd(x,a[i])。
  • 问最少多少步,可以让a中所有数字相同。
  • 输出步数和每一步的选择。

2. 思路分析

  • 这一看,直接选x=1,一步就完事了!仔细一看x必须>=2。
  • 那么我可以直接选2,a中只剩下2和1;再选个3,直接就搞定了。
  • 先计算a中所有数字的gcd记为g,若g>=2,那么可以选g,一步就可以把a变成全g。
  • 然后从小到大枚举<=m的所有质数v,若v和所有a[i]互质,则一步就可以把a变成全1。
    • 如何计算互质呢,只需要所有a[i]中没有这个质因子,那么分解每个a[i]用set记录即可。
    • 你可能认为这里枚举复杂度是m(1e6中有78498个素数),一共T组数据会不会超时。这是不会的。
      • 因为s是很稀疏的。若要使复杂度到达m,需要s稠密,即a中存在所有这七万多个素数。那么a的长度很长,T就会很小。

3. 代码实现

def solve():
    n, m = RI()
    a = set(RILST())
    if len(a) == 1:
        return print(0)
    g = reduce(gcd, a)
    if g >= 2:
        print(1)
        return print(g)

    s = set()
    for x in a:
        i = 2
        while i * i <= x:
            while x % i == 0:
                s.add(i)
                x //= i
            i += 1
        if x > 1: s.add(x)

    for v in ps:
        if v > m: break
        if v not in s:
            print(1)
            return print(v)

    print(2)
    print(2)
    print(3)

六、参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/447660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HummerRisk V1.0 :架构升级说明

升级前须知 HummerRisk v1.0.0 版本与 HummerRisk v0.10.0 以及之前版本存在一定的差异。 HummerRisk v1.0.0 增加了一些新功能&#xff0c;也同时删除了一些功能&#xff0c;另外也对部分功能进行了重构和修复。 整体架构 功能原理 工作流程 组件说明 Vue&#xff1a;使用…

windows下为python3.x安装dlib

为任意版本python3.x安装dlib&#xff0c;通过VS2022编译方式安装更合理些, 因为目前pypi也只为windows提供了python3.5和3.6的.whl 1.安装vs2019 or later2.安装cmake3. 下载dlib的源代码(保存到 C&#xff0c;D&#xff0c;E&#xff0c;F盘都可以)4.开始编译5. 编译成果&…

科学计算库——numpy

科学计算库——numpy 一、概述 numpy作为高性能科学计算和数据分析的基础包&#xff0c;它是众多数据分析、机器学习等工具的基础架构&#xff0c;掌握numpy的功能及其用法将有助于后续其他数据分析工具的学习。本章将针对numpy库的基础功能进行详细地讲解。 二、数组对象 …

浅述 国产仪器仪表 4455D 4455E 4455F数字示波器

4455系列数字示波器具有12bit垂直分辨率&#xff0c; 5GSa/s最高采样速率&#xff0c;500Mpts/CH存储深度&#xff0c;模拟带宽500MHz、1GHz、2GHz&#xff0c;为您提供高分辨率信号采集与波形分析体验。4455系列数字示波器具有波形自动设置、波形参数自动测量与统计、光标测量…

银行数字化转型导师坚鹏:商业银行大数据风控建模方法与案例

商业银行大数据风控建模方法与案例 课程背景&#xff1a; 数字化背景下&#xff0c;很多银行存在以下问题&#xff1a; 不清楚商业银行大数据风控建模方法&#xff1f; 不清楚银行大数据风控建模应用案例&#xff1f; 不知道银行大数据风控建模核心内容&#xff1f; 课…

【源码解析】Spring事务 @Transactional 源码解析

源码解析 自动化配置 在spring-boot-autoconfigure查看spring.factories引入TransactionAutoConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration\ org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\查看Tran…

大数据之Spark运行流程

文章目录 前言&#xff08;一&#xff09;Spark On Yarn集群的Client模式运行流程&#xff08;二&#xff09; Spark On Yarn集群的Cluster模式运行流程总结 前言 #博学谷IT学习技术支持# 上篇文章有讨论到Spark On Yarn的两种部署模式&#xff0c;如果有不清楚的地方&#xf…

java ssm高校学术会议论文管理系统

在研究课题--学术会议论文管理系统的实现与设计&#xff0c;对操作使用的便利性&#xff0c;系统的可制定性和安全性以及管理的全面性等多个方面研究。其中主要研究的内容是将学术会议论文管理系统功能划分为: 通知类型、通知信息、部门信息、用户信息用户反馈、会议类型、会议…

JavaScript(JS)-1.JS入门

1.JavaScript概念 (1)JavaScript是一门跨平台&#xff0c;面向对象的脚本语言&#xff0c;来控制网页行为的&#xff0c;它能使网页可交互 (2)W3C标准&#xff1a;网页主要由三部分组成 ①结构&#xff1a;HTML负责网页的基本结构&#xff08;页面元素和内容&#xff09;。 …

4.6 曲线拟合的最小二乘法

4.6.1 最小二乘问题的提法 学习目标&#xff1a; 要学习曲线拟合的最小二乘法&#xff0c;我会按照以下步骤进行&#xff1a; 理解最小二乘法的基本思想和原理&#xff0c;即在已知数据的情况下&#xff0c;通过拟合一条曲线&#xff0c;使得曲线与数据之间的误差最小化。 …

科技创新催生新动能,“云游戏+”打通数字经济任督二脉

配图来自Canva可画 利好政策接连发布&#xff0c;人工智能、云计算等前沿技术席卷各行各业&#xff0c;传统行业网络化、数字化、智能化转型已不可逆&#xff0c;数字经济将迎来大爆发。 国务院发展研究中心市场经济研究所所长王微在中国发展高层论坛2023年年会上表示&#x…

< elementUi组件封装: 通过 el-tag、el-popover、vue动画等实现公告轮播 >

文章目录 &#x1f449; 前言&#x1f449; 一、效果演示&#x1f449; 二、实现思路&#x1f449; 三、实现案例往期内容 &#x1f4a8; &#x1f449; 前言 在 Vue elementUi 开发中&#xff0c;遇到这么一个需求&#xff0c;要实现公告轮播的效果。说实话&#xff0c;一开…

大家进来了解2023年6月CDGA/CDGP数据治理认证考试报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

多个微服务怎么放入一个tomcat

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

(一)Linux 环境下搭建 ElasticSearch (CentOS 7)

目录 1、搭建 Linux 相关环境 2、执行解压操作 3、创建新用户 4、修改配置文件 elasticsearch.yml 5、启动 ElasticSearch 6、修改虚拟机配置文件 7、重新启动 ElasticSearch 8、查看是否启动命令 9、访问 ElasticSearch 1、搭建 Linux 相关环境 没有服务器安装VM&a…

Golang每日一练(leetDay0043)

目录 127. 单词接龙 Word Ladder &#x1f31f;&#x1f31f;&#x1f31f; 128. 最长连续序列 Longest Consecutive Sequence &#x1f31f;&#x1f31f; 129. 求根节点到叶节点数字之和 Sum Root-to-leaf Numbers &#x1f31f;&#x1f31f; &#x1f31f; 每日一练…

QML控件和对话框之ApplicationWindows

ApplicationWindows ApplicationWindows应用程序窗口Action菜单类控件3.StatusBar4.工具栏控件类 ApplicationWindows应用程序窗口 Application Window在 Qt Quick Controls中类似于QMain Window 在 Qt/C中的角色&#xff0c;ApplicationWindow可以充当应用程序顶层窗口&#…

气传导耳机是什么原理?气传导蓝牙耳机优缺点分析

气传导耳机&#xff0c;简而言之&#xff0c;就是一种通过空气振动进行声音传播的耳机&#xff0c;采用波束成形技术进行定向传音&#xff0c;开放双耳设计模式&#xff0c;将音频传送到耳朵。 其发声途径&#xff0c;和我们双耳聆听到环境音以及人声的途径都是一样的&#xf…

UART协议——异步全双工串行通信方式

文章目录 前言一、简介1、优点2、缺点 二、数据格式三、波特率1、定义2、波特率和采样频率 四、常见接口电平1、TTL电平2、RS232&#xff08;负逻辑&#xff09;3、RS485 前言 2023.4.22 世界地球日 一、简介 UART&#xff1a;Universal Asynchronous Receiver/Transmitter&a…

数据驱动+AI引擎,为MarTech打开全新的想象空间

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 近年来&#xff0c;随着全球数字化、信息化进程不断提速&#xff0c;企业营销的战场也逐渐转移至线上。一方面&#xff0c;消费者行为的数字化使得企业营销活动更加依赖于线上数字营销&#xff1b;另一方面&#xff0c;包括…