Codeforces Round 907 (Div. 2——ABC)

news2024/11/23 7:01:01

A.Sorting with Twos

题目

 给定一个数组a,可执行操作如下:

1、选择一个非负整数m,要求2^{m} \leq n

2、将数组中元素从1到m减去1

问,是否可以通过以上操作得到一个单调不增的数组序列。

输入

首行样例个数t,1 \leq t \leq 10^{4}

每个样例首行数组长度n,1 \leq n \leq 20

第二行数组a,其中0 \leq a_{i} \leq 1000

输出

"YES" or "NO"

解析

减一的操作执行范围是一个区间如,1-1,1-2,1-4,1-8...。每个区间中的数字比能通过减一操作,使其全部小于区间后的数字,故判断数组是否可以成为单调不增序列,主要判断两个区间之间,一同变化的数字时候存在逆序。

比如1-2和1-4,如果3,4存在逆序结果则为NO,因为3和4是一同变化的,无论怎样变化都改变不了二者的大小关系。1-4和1-8类似,查看5-8之间是否存在逆序。

先得到逆序数组b,其中b_{i} = a_{i+1} - a_{i} 。如果i不是2的整次幂,且为负数,说明此处存在无法改变的逆序,则输出结果为NO。

(difference array不应该翻成“差分数组”吧?至少我学差分的时候,不是现在这个概念。有懂的小伙伴可以评论说下。)

代码


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

for t in range(T):
    n = int(input().strip())
    N = n + 10
    a = [0] * N
    b = a.copy()
    a[1:n+1] = list(map(int, input().strip().split()))

    for i in range(1, n):
        b[i] = a[i+1] - a[i]

    for i in range(1, n+1):
        if bin(i).count("1") != 1 and b[i] < 0:
            print("NO")
            break
    else:
        print("YES")

 如何判断i是2的整次幂,我第一想到的是位运算。因为是python,我直接转成了二进制字符串计算“1”的数量。如果一个数字是2的整次幂,则其二进制表示中1的数量应该为1。自己写个计数函数提前break应该会快一点。


def pow_2(k):
    cnt1 = 0
    while k:
        if k & 1:
            cnt1 += 1
            if cnt1 > 1:
                return False
        k >>= 1
    return True

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

for t in range(T):
    n = int(input().strip())
    N = n + 10
    a = [0] * N
    b = a.copy()
    a[1:n+1] = list(map(int, input().strip().split()))

    for i in range(1, n):
        b[i] = a[i+1] - a[i]

    for i in range(1, n+1):
        if not pow_2(i) and b[i] < 0:
            print("NO")
            break
    else:
        print("YES")

数据范围较小,发现两种写法时间差不多。 

B.Deja Vu(法语,大概“似曾相识”的意思)

题目

 给定一个长度为n的数组a,和长度为q的数组x,其中元素为整数。执行q个操作,对于第i个操作,如果a中元素能够被2^{x_{i}}整除,则将此元素加上2^{x_{i-1}}。执行完q个操作后,输出数组a。

输入

首行样例个数t,1 \leq t \leq 10^{4}

每个样例首行数组长度n和q,1 \leq n, q \leq 10^{5}

第二行数组a,其中0 \leq a_{i} \leq 10^{9}

第三行数组x,0 \leq x_{i} \leq 30

输出

每个样例修改后的数组a

解析

命题人的解析很巧妙,我当时对x去重后直接模拟的,也能通过。如果一个数字a能够被x_{i} 整除,那么a + x_{i-1}一定不能被x_{i}整除(纸上写个公式就明白了),同时之后也不能被比x_{i}大的x_{j}整除(因为x_{i-1}的加入)。因此,数组x可以简化成严格递减的单调队列,降低复杂度。

代码

rank时:

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

for t in range(T):
    n, q = map(int, input().strip().split())
    a = list(map(int, input().strip().split()))
    x = list(map(int, input().strip().split()))
    x_c = list()
    x_s = set()
    for xi in x:
        if xi not in x_s:
            x_c.append(xi)
            x_s.add(xi)
    x = x_c

    for i in range(len(x)):
        div = 1
        for k in range(x[i]):
            div <<= 1
        add = div >> 1
        for j in range(n):
            if a[j] % div == 0:
                a[j] += add

    for i in a:
        print(i, end=" ")
    print()

按照命题人解析思路:

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

for t in range(T):
    n, q = map(int, input().strip().split())
    a = list(map(int, input().strip().split()))
    x = list(map(int, input().strip().split()))
    temp = list()

    for xi in x:
        if not temp or xi < temp[-1]:
            temp.append(xi)
    x = temp

    for xi in x:
        div = 1
        for k in range(xi):
            div <<= 1
        for i in range(len(a)):
            if a[i] % div == 0:
                a[i] += (div >> 1)

    for i in a:
        print(i, end=" ")
    print()

最后发现时间差不多,理论上命题人的要更快,因为单调递减队列元素肯定要比简单去重少。(可能是不同时间提交的原因吧。) 

C.Smilo and Monsters

题目

有n个兽人部落,第i个部落有a_{i}个兽人,游戏目标击败所有部落。玩家有两种攻击方式和一个怒气值x,初始为0:

1、选择一个部落,击败一个兽人,怒气加一

2、选择一个至少存在x个兽人的部落,消耗所有怒气,击败x个兽人

问最少需要多少次攻击可以达到游戏目标

输入

首行样例个数t,1 \leq t \leq 10^{4}

每个样例首行数部落数n,1 \leq n \leq 2 \times 10^{5}

第二行部落数组a,其中0 \leq a_{i} \leq 10^{9}

保证样例n的总和不超过2 \times 10^{5}

输出

最小攻击次数

解析

 贪心算法,将数组a排序,用小部落积累怒气,处理大部落。如果总兽人数为b,那么有b // a数量的兽人可以用怒气清楚,故怒气释放次数为b // a 所能覆盖的最大部落的数量,再加上积攒怒气的次数,即为最终结果。

比赛时贪心想到了,模拟TLE,还TLE了两次。

代码

from math import ceil

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

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

    b = sum(a)
    i = n
    c = b // 2
    cnt = 0
    while c > 0:
        i -= 1
        c -= a[i]
    
    print(ceil(b / 2) + n - i)

题目阅读依旧是一个问题,尤其题目B,看懂题看了半天,愁。

AB一次过,CTLE两次。CF692->CFCF938。

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

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

相关文章

MySQL第七讲·怎么利用聚合函数实现高效地分组统计?

你好&#xff0c;我是安然无虞。 文章目录 聚合函数&#xff1a;怎么高效地进行分组统计&#xff1f;sum( )avg( ) & max( ) & min( )count( ) 聚合函数&#xff1a;怎么高效地进行分组统计&#xff1f; MySQL中有5种聚合函数较为常用&#xff0c;分别是求和函数sum(…

面试官:说说Redis的SDS底层实现原理

文章目录 前言面试开始1、说说Redis基本类型有哪些2、String类型常用于什么场景3、String类型采用什么数据结构4、继续深入讲讲SDS实现细节5、你说说SDS和C语言字符串的区别5.1、SDS获取长度时间复杂度更低5.2、SDS杜绝缓冲区溢出5.3、SDS减少字符串内存重分配次数5.4、SDS二进…

pytest全局变量的使用

这里重新阐述下PageObject设计模式&#xff1a; PageObject设计模式是selenium自动化最成熟&#xff0c;最受欢迎的一种模式&#xff0c;这里用pytest同样适用 这里直接提供代码&#xff1a; 全局变量 conftest.py """ conftest.py 全局变量&#xff0c;主要实…

基于Java+SpringBoot+LayUI仓库管理系统

一.项目介绍 本项目是使用JavaSpringBoot开发&#xff0c;可以实现仓库的注册、登录&#xff0c;登录后可进入系统&#xff0c;进行客户管理、供应商管理、商品管理、商品退货查询管理、登录日志及退出等几大模块。系统界面采用传统的后台管理界面&#xff0c;界面简单、直观。…

2023年“走红军走过的路”徒步穿越系列活动(大通湖站)盛大开赛!

“蟹”逅红色大通湖 徒步秋色水波中 ——“中国体育彩票” 2023年“走红军走过的路”徒步穿越系列活动&#xff08;大通湖站&#xff09;暨大通湖半程马拉松盛大开赛&#xff01; 11月5日上午8:30&#xff0c;2023年“走红军走过的路”徒步穿越系列活动&#xff08;大通湖站&…

数据结构-Prim算法构造无向图的最小生成树

引子&#xff1a; 无向图如果是一个网&#xff0c;那么它的所有的生成树中必有一颗生成树的边的权值之和是最小的&#xff0c;我们称 这颗权值和最小的树为&#xff1a;“最小生成树”&#xff08;MST&#xff09;。 其中&#xff0c;一棵树的代价就是树中所有权值之和。 而…

幂等最佳实践

1、什么是幂等&#xff1f; 根据百度百科解释&#xff1a; “幂等&#xff08;idempotent、idempotence&#xff09;是一个数学与计算机学概念&#xff0c;常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数&…

删除word最后一页之后的空白页

最近编辑word比较多&#xff0c;有时最后一页&#xff08;最后一页内容还有可能是表格&#xff09;之后&#xff0c;还有一页空白页&#xff0c;单独按下backspace、del都删不掉&#xff0c;很让人着急。 经过查询有几种方法&#xff1a; &#xff08;1&#xff09;点击选中空…

kubernetes(5) 续4

目录 volumes emptyDir卷 hostpath卷 nfs卷 持久卷 storageclass statefulset控制器 mysql主从部署 volumes emptyDir卷 [rootk8s2 volumes]# vim emptydir.yaml apiVersion: v1 kind: Pod metadata:name: vol1 spec:containers:- image: busyboxplusname: vm1command: ["…

pyqt5的组合式部件制作(一)

以多选一的选择器为例&#xff0c;来实践一下工程实用级别的组合式部件设计。自己之前做的自定义的组合式部件&#xff0c;结构不够简单优化&#xff0c;在实际的工程里面&#xff0c;使用部件的过程比较繁琐。所以&#xff0c;这里来做一个优化的实验。 之所以做这个组合部件&…

DevChat:开源AI编程助手的全面解析

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【场景方案】前端如何结合GPT提升我们的开发效率,个人经验总结,不定期更新~

文章目录 AI模型的选择提问的方式很重要心里建设提问方法论设立角色从总体到局部步骤拆分&#xff0c;循序渐进举例子说明主动让他联系上文不要太纠结提问的方式 网址推荐尾巴 不说废话&#xff0c;没有铺垫&#xff0c;直接开始讲重点 AI模型的选择 首先咱们要选择一个适合的…

3-知识补充-HTTP协议

3-知识补充-HTTP协议 文章目录 3-知识补充-HTTP协议HTTP协议基础什么是HTTP&#xff1f;HTTP协议的会话方式HTTP1.0和HTTP1.1的区别 请求和响应报文报文的格式报文解析实例-请求百度官网请求报文-GET请求请求报文-POST请求-学习用-非请求百度官网响应报文 响应状态码有代表性的…

第八章认识Express框架

目录 Express模块化路由 基本概述 基本使用 基本构建 案例项目 Express接收请求参数 基本概述 基本类别 Express接收GET请求参数 Express接收POST请求参数 Express接收路由参数 Express模块化路由 基本概述 在Express中&#xff0c;路由是指确定应用程序如何响应对…

功率放大器的工作原理及选购技巧

功率放大器是电子设备中非常重要的组成部分之一&#xff0c;它的主要功能是将输入信号的功率进行放大&#xff0c;以驱动高功率负载。在各种应用领域中&#xff0c;如音频放大器、无线电频率放大器、射频功率放大器等&#xff0c;功率放大器都发挥着非常重要的作用。下面将介绍…

Kubernetes二进制搭建

目录 一、K8S的架构 二、K8S创建Pod资源的工作流程 三、K8S资源对象和资源配置信息 K8S资源对象 K8S资源配置信息 四、K8S的的三种网络和三种接口 三种网络&#xff1a; 三种节点&#xff1a; 五、etcd 集群 etcd 的特点&#xff1a; 六、flannel flannel方案 K8S …

指令手册术语缩写

指令手册术语缩写 1 指令汇总表中的操作码列(不带VEX前缀的指令)2 指令汇总表中的操作码列(带有VEX前缀的指令)3 操作码汇总表中的指令列 本文属于《 X86指令基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 指令汇总表中的操作码列(不带VEX前缀的指令) 2 指令汇总表中的…

阿里云安全恶意程序检测(速通三)

阿里云安全恶意程序检测 特征工程进阶与方案优化pivot特征构建pivot特征pivot特征构建时间pivot特征构建细节特点 业务理解和结果分析结合模型理解业务多分类问题预测结果分析 特征工程进阶基于LightGBM模型验证模型结果分析模型测试 优化技巧与解决方案升级内存管理控制加速数…

【配置】如何在打包Spring Boot项目时按需使用日常、测试、预发、正式环境的配置文件

文章目录 前言1. 创建5个配置文件2. 在pom.xml文件中如下配置3. 在application.properties中加入环境变量 前言 在我们开发项目的时候&#xff0c;一般有四套环境&#xff1a;日常、测试、预发、正式。日常环境作为我们开发环境&#xff1b;测试环境给测试同学测试功能&#x…

基于厨师算法的无人机航迹规划-附代码

基于厨师算法的无人机航迹规划 文章目录 基于厨师算法的无人机航迹规划1.厨师搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用厨师算法来优化无人机航迹规划。 1.厨师搜索算法 …