Codeforces Round 1020 (Div. 3) A-D

news2025/7/15 4:42:05

A. Dr. TC

https://codeforces.com/contest/2106/problem/A

题目大意:

对输入字符串每个位置字符依次翻转(1->0 , 0->1)

比如: 101

        001 翻转位置1

        111                2

        100               3

题解:

观察数学特征:ans=n1*(n-1)+n0

t=int(input())

for i in range(t):
    n=int(input())
    s=input()

    n1=s.count('1')
    n0=s.count('0')

    print(n1*(n-1)+n0)

B. St. Chroma 

https://codeforces.com/contest/2106/problem/B

题目大意:

需要构造长为n的数组a,包含0到n-1各一个

然后填涂一个新数组b:从左到右第 i 个位置等于MEX(a[ : i ])

MEX:该序列中第一个未出现的非负整数

现在每个测试案例给n,x,要求b中x的最大可能数

题解:

贪心策略:前面尽快填补0到x-1,然后x得最后出

注意特判:n==x时,按照上面的贪心策略会导致多多余一个元素,正确做法是0到n-1按序填补

t=int(input())
for i in range(t):
    n,x=map(int,input().split())

    if n!=x:
        l1=[j for j in range(x)]
        l2=[j for j in range(x+1,n)]

        l3=l1+l2+[x]

        print(*l3)
    else:
        l=[j for j in range(n)]
        print(*l)

C. Cherry Bomb

https://codeforces.com/contest/2106/problem/C

题目大意:

每个案例输入n和k

再给a,b两个数组(n是他们的长度),其中a的元素已经固定,b中-1的位置表示可以随意变,范围是 [ 0 , k ] 左闭右开

要求a,b各个相对应的位置相加的和一致,输出有几种配合方式,如果没有可能就输出0

题解:

先过一遍统计一下b中不是-1的位置的和

如果不是一致的就可以直接输出0了,

如果一致也别开心太早:

由于a中元素x在添加[ 0 , k ]后区间为[ x , x + k ],su要在这区间中

从极端情况考虑就是if mx<=mn+k and mx<=su[0]<=mn+k:(得利用and短路的特性,判断顺序不能换)

        可能a中最小值比和小或者最大值比和大:还是0

        否则的话就输出1,因为和已经固定了

如果没有一个和的话那就贪心:a中最大最小值限定了范围上下限,同时还被k限定

        观察后得到ans=k+mn-mx+1

t=int(input())

for i in range(t):
    n,k=map(int,input().split())

    a=list(map(int,input().split()))
    b=list(map(int,input().split()))

    su=[]

    for j in range(n):
        if b[j]!=-1:
            su.append(a[j]+b[j])

    if su:
        if su[0]!=sum(su)/len(su):
            print(0)
            continue

        else:
            mn=min(a)
            mx=max(a)
            if mx<=mn+k and mx<=su[0]<=mn+k:
                print(1)
            else:
                print(0)



    else:
        mx=max(a)
        mn=min(a)
        if mx>mn+k:
            print(0)
        else:
            print(k+mn-mx+1)

但是是错的

贪心个屁,还不如直接模拟 

t = int(input())

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

    target = None
    cnt_missing = 0

    for i in range(n):
        if b[i] != -1:
            curr_sum = a[i] + b[i]
            if target is None:
                target = curr_sum
            elif target != curr_sum:
                print(0)
                break
        else:
            cnt_missing += 1
    else:  # 没有break才会执行
        if target is None:  # b全是-1的情况
            max_a = max(a)
            min_a = min(a)
            if max_a > min_a + k:  # 差值太大,无解
                print(0)
            else:

                ans = min_a + k - max_a + 1
                print(max(0, ans))
        else:
            # 已知target,检查所有-1位置填入的值是否在范围内
            valid = True
            
            for i in range(n):
                if b[i] == -1:
                    bi = target - a[i]
                    if bi < 0 or bi > k:
                        valid = False
                        break
            '''
            mn=min(a)
            mx=max(a)
            if mn>target or mx
            '''
            print(1 if valid else 0)

D. Flower Boy

https://codeforces.com/contest/2106/problem/D

题目大意:

一个长度为n的数组a,一个长度为m的数组b,按左到右的顺序遍历a,选出m个数,选出的第i个不小于b[i],现在有种只能进行一次的操作,可以在a中任意位置插入一个任意整数k,如果不插入就能选m个就输出0,如果插入后仍不能选m个就输出-1,否则求最小k

注意:题面说“从左到右”并不是连续,所以m朵花可以是跳跃的

题解:

首先构造check函数模拟选花的过程

判断原来数组不插入可以的话直接输出0

二分查找k值

枚举所有可插入位置

def solve():
    n, m = map(int, input().split())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))

    def check(arr, b):
        bi = 0
        for val in arr:
            if bi < len(b) and val >= b[bi]:
                bi += 1
        return bi == len(b)

    if check(a, b):
        print(0)
        return

    left = 1
    right = max(max(a), max(b))
    ans = -1

    while left <= right:
        mid = (left + right) // 2
        
        possible = False
        for i in range(n + 1):
            temp_a = a[:]
            temp_a.insert(i, mid)
            if check(temp_a, b):
                possible = True
                break
        
        if possible:
            ans = mid
            right = mid - 1
        else:
            left = mid + 1

    print(ans)

t = int(input())
for _ in range(t):
    solve()

做到D感觉就太累了,也许题面是中文、时间再早点还能a一下,我还是练太少了

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

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

相关文章

系统思考:看清问题背后的结构

组织的挑战&#xff0c;往往不是因为不努力&#xff0c;而是“看不清” 结束了为期两天系统思考课程的第一天&#xff0c;被学员的全情投入深深打动。我们用系统结构图&#xff0c;一步步揭示那些表面看起来“习以为常”的问题&#xff1a; 什么原因跨部门协作总是磕磕绊绊&am…

Langchain_Agent+数据库

本处使用Agent数据库&#xff0c;可以直接执行SQL语句。可以多次循环查询问题 前文通过chain去联系数据库并进行操作&#xff1b; 通过链的不断内嵌组合&#xff0c;生成SQL在执行SQL再返回。 初始化 import os from operator import itemgetterimport bs4 from langchain.ch…

QT6 源(45):分隔条 QSplitter 允许程序的用户修改布局,程序员使用 IDE时,就是分隔条的用户,以及其 QSplitter 源代码

&#xff08;1&#xff09; &#xff08;2&#xff09;本类的继承关系如下&#xff0c;所以说分隔条属于容器&#xff1a; &#xff08;3&#xff09;本类的属性&#xff1a; &#xff08;4&#xff09; 这是一份 QSplitter 的举例代码&#xff0c;注意其构造函数时候的传参&am…

Huffman(哈夫曼)解/压缩算法实现

一、文件压缩 哈夫曼压缩算法需要对输入的文件&#xff0c;逐字节扫描&#xff0c;统计出不同字节出现的数量&#xff08;频率&#xff09;&#xff0c;根据的得到的频率生成一组叶子节点&#xff0c;这些节点存储着<字节信息>和<频率>,通常需要按频率排序后存储在…

迭代器模式:统一数据遍历方式的设计模式

迭代器模式&#xff1a;统一数据遍历方式的设计模式 一、模式核心&#xff1a;将数据遍历逻辑与数据结构解耦 在软件开发中&#xff0c;不同的数据结构&#xff08;如数组、链表、集合&#xff09;有不同的遍历方式。如果客户端直接依赖这些数据结构的内部实现来遍历元素&…

LeetCode每日一题4.23

题目 问题分析 计算每个数字的数位和&#xff1a;对于从 1 到 n 的每个整数&#xff0c;计算其十进制表示下的数位和。 分组&#xff1a;将数位和相等的数字放到同一个组中。 统计每个组的数字数目&#xff1a;统计每个组中有多少个数字。 找到并列最多的组&#xff1a;返回数…

RunnerGo API性能测试实战与高并发调优

API 性能测试通过模拟不同负载场景&#xff0c;量化评估 API 的响应时间、吞吐量、稳定性、可扩展性等性能指标&#xff0c;关注其在正常、高峰甚至极限负载下的表现。这有助于确保 API 稳定高效地运行&#xff0c;为调用者提供优质服务。 接下来&#xff0c;我们借助 RunnerG…

STM32——相关软件安装

本文是根据江协科技提供的教学视频所写&#xff0c;旨在便于日后复习&#xff0c;同时供学习嵌入式的朋友们参考&#xff0c;文中涉及到的所有资料也均来源于江协科技&#xff08;资料下载&#xff09;。 Keil5 MDK安装 1.安装Keil5 MDK2.安装器件支持包方法一&#xff1a;离线…

数据结构入门【算法复杂度】超详解深度解析

&#x1f31f; 复杂度分析的底层逻辑 复杂度是算法的"DNA"&#xff0c;它揭示了两个核心问题&#xff1a; 数据规模(n)增长时&#xff0c;资源消耗如何变化&#xff1f; 不同算法在极端情况下的性能差异有多大&#xff1f; 数学本质解析 复杂度函数 T(n)O(f(n))…

java多线程(7.0)

目录 ​编辑 定时器 定时器的使用 三.定时器的实现 MyTimer 3.1 分析思路 1. 创建执行任务的类。 2. 管理任务 3. 执行任务 3.2 线程安全问题 定时器 定时器是软件开发中的一个重要组件. 类似于一个 "闹钟". 达到一个设定的时间之后, 就执行某个指定好的…

Long类型封装Json传输时精度丢失问题

在信息做传输时&#xff0c;经常会使用到类型转换&#xff0c;这个时候因为一些问题会导致精度的丢失。在支付业务中这种问题更为致命。 这里我主动生成一个支付订单并将相关信息使用base64编码为一个二维码返回给前端进行支付&#xff0c;前端进行支付时我通过回调方法发现回调…

《从GPT崛起,看AI重塑世界》

《从GPT崛起,看AI重塑世界》 GPT 诞生:AI 领域的震撼弹 2022 年 11 月 30 日,OpenAI 发布了一款名为 ChatGPT 的人工智能聊天机器人程序,宛如一颗重磅炸弹投入了平静的湖面,迅速在全球范围内引发了轩然大波,成为了科技领域乃至大众舆论场中最热门的话题之一。一时间,无…

系统架构-安全架构设计

概述 对于信息系统来说&#xff0c;威胁有&#xff1a;物理环境&#xff08;最基础&#xff09;、通信链路、网络系统、操作系统、应用系统、管理系统 物理安全&#xff1a;系统所用设备的威胁&#xff0c;如自然灾害、电源故障通信链路安全&#xff1a;在传输线路上安装窃听…

鼠标指定范围内随机点击

鼠标指定范围内随机点击 点赞神器 将鼠标移动到相应位置后按F5 F6键&#xff0c;设置点击范围&#xff0c; F8开始&#xff0c;ESC中止。 有些直播有点赞限制&#xff0c;例如某音&#xff0c;每小时限制3千次&#xff0c;可以设置1200毫秒&#xff0c;3000次。 软件截图&#…

HashSet 概述

1. HashSet 概述 HashSet 是 Java 集合框架中 Set 接口的一个实现类&#xff0c;它存储唯一元素&#xff0c;即集合中不会有重复的元素。HashSet 基于哈希表&#xff08;实际上是 HashMap 实例&#xff09;来实现&#xff0c;不保证元素的顺序&#xff0c;并且允许存储 null 元…

遥测终端机,推动灌区流量监测向数据驱动跃迁

灌区范围那么大&#xff0c;每一滴水怎么流都关系到粮食够不够吃&#xff0c;还有生态能不能平衡。过去靠人工巡查、测量&#xff0c;就像拿着算盘想算明白大数据&#xff0c;根本满足不了现在水利管理的高要求。遥测终端机一出现&#xff0c;就像给灌区流量监测安上了智能感知…

蓝耘平台介绍:算力赋能AI创新的智算云平台

一、蓝耘平台是什么 蓝耘智算云&#xff08;LY Cloud&#xff09;是蓝耘科技打造的现代化GPU算力云服务平台&#xff0c;深度整合自研DS满血版大模型技术与分布式算力调度能力&#xff0c;形成"模型算力"双轮驱动的技术生态。平台核心优势如下&#xff1a; 平台定位…

QtDesigner中Button控件详解

一&#xff1a;Button控件 关于Button控件的主要作用就是作为触发开关&#xff0c;通过点击事件&#xff08;click&#xff09;执行代码逻辑&#xff0c;或者作为功能入口&#xff0c;跳转到其他界面或模块。 二&#xff1a;常见属性与配置 ①Button的enabled&#xff0c;大…

Flink 源码编译

打包命令 打包整个项目 mvn clean package -DskipTests -Drat.skiptrue打包单个模块 mvn clean package -DskipTests -Drat.skiptrue -pl flink-dist如果该模块依赖其他模块&#xff0c;可能需要先将其他模块 install 到本地&#xff0c;如果依赖的模块的源代码有修改&#…

docker的安装和简单使用(ubuntu环境)

环境准备 这里用的是linux的环境&#xff0c;如果没有云服务器的话&#xff0c;就是用虚拟环境吧。 虚拟环境的安装参考&#xff1a;vmware17的安装 linux镜像的安装 docker安装 我使用的是ubuntu&#xff0c;使用以下命令&#xff1a; 更新本地软件包索引 sudo apt u…