【算法训练营】数字盒子,重编码,成绩排序(python实现)

news2025/1/17 6:07:16

数字盒子

问题描述

你有一个盒子,你可以往里面放数,也可以从里面取出数。

初始时,盒子是空的,你会依次做 Q 个操作,操作分为两类:

  1. 插入操作:询问盒子中是否存在数 x,如果不存在则把数 x 丢到盒子里。
  2. 删除操作:询问盒子中是否存在数 x,如果存在则取出 x。

对于每个操作,你需要输出是否成功插入或删除。

输入格式

第一行一个正整数 Q,表示操作个数。

接下来 Q 行依次描述每个操作。每行 2 个用空格隔开的非负整数 op,x 描述一个操作:op 表示操作类型,op=1 则表示这是一个插入操作,op=2 则表示这是一个删除操作;x 的意义与操作类型有关,具体见题目描述。

输出格式

按顺序对所有操作输出,对于每个操作输出一行,如果成功则输出“Succeeded”(不含引号),如果失败则输出“Failed”(不含引号)。

样例输入

6
1 100
1 100
2 100
1 200
2 100
2 200

样例输出

Succeeded
Failed
Succeeded
Succeeded
Failed
Succeeded

数据范围

对于 60% 的数据,保证 x<10^5。

对于 100% 的数据,保证 x<10^18,Q≤5*10^5。

对于所有数据,保证 op∈{1,2}。

时间限制:1 s

空间限制:256 MB

提示

[对于 x 较小的情况,我们只需要用数组记录每个数是否在盒子里即可。]

[对于 x 较大的情况,我们可不可以用什么方法把它们“变小”呢?可以想想哈希表哦!]

代码实现

class Box:
    def __init__(self):
        self.contents = set()

    def insert(self, x):
        if x not in self.contents:
            self.contents.add(x)
            return "Succeeded"
        else:
            return "Failed"

    def remove(self, x):
        if x in self.contents:
            self.contents.remove(x)
            return "Succeeded"
        else:
            return "Failed"

def main():
    q = int(input())
    box = Box()

    for _ in range(q):
        op, x = map(int, input().split())

        if op == 1:
            result = box.insert(x)
        elif op == 2:
            result = box.remove(x)

        print(result)

if __name__ == "__main__":
    main()

重编码

问题描述

输入格式

输出格式

输出一行一个整数,表示整篇文章重编码后的最短长度。

样例输入

4
1
1
2
2

样例输出

12

样例解释

数据范围

提示

[我们希望越长的串出现次数越少,那么贪心地考虑,让出现次数少的串更长。]

[于是我们先区分出出现次数最少的 2 个串,在它们的开头分别添加 0 和 1。]

[接着,由于它们已经被区分(想一想,为什么?),所以我们可以把它们看作是**一个**单词,且其出现次数为它们的和,然后继续上面的“添数”和“合并”操作。]

[这样,我们不停地“合并单词”,直到只剩 1 个单词,即可结束。]

[可以证明这是最优的。]

代码实现

import heapq


# 这是求解整个问题的函数
# 返回值:答案
def get_answer():
    n = int(input())
    w = [int(input()) for _ in range(n)]

    # 将所有w加入优先队列pq中
    pq = []
    for i in range(n):
        heapq.heappush(pq, w[i])

    sum_val = 0  # 置零返回值
    while len(pq) > 1:  # 当pq中仍有超过多少元素时进行循环呢?
        new_ele = 0  # 这是本次合并后将要加入队列的新元素
        # 从pq中取出最小的两个元素并合并
        for k in range(2):
            new_ele += heapq.heappop(pq)
        sum_val += new_ele  # 将本次合并对答案的贡献加入答案
        heapq.heappush(pq, new_ele)  # 将新元素加入队列

    return sum_val  # 返回答案


# 获取答案并输出
result = get_answer()
print(result)

成绩排序

问题描述

有 n 名学生,它们的学号分别是 1,2,…,n。这些学生都选修了邓老师的算法训练营、数据结构训练营这两门课程。

学期结束了,所有学生的课程总评都已公布,所有总评分数都是 [0,100] 之间的整数。巧合的是,不存在两位同学,他们这两门课的成绩都完全相同

邓老师希望将这些所有的学生按这两门课程的总分进行降序排序,特别地,如果两位同学的总分相同,那邓老师希望把算法训练营得分更高的同学排在前面。由于上面提到的巧合,所以,这样排名就可以保证没有并列的同学了。

邓老师将这个排序任务交给了他的助教。可是粗心的助教没有理解邓老师的要求,将所有学生按学号进行了排序。

邓老师希望知道,助教的排序结果中,存在多少逆序对

如果对于两个学生 (i,j) 而言,i 被排在了 j 前面,并且i 本应被排在 j 的后面,我们就称 (i,j) 是一个逆序对

请你先帮邓老师把所有学生按正确的顺序进行排名,再告诉他助教的错误排名中逆序对的数目。

输入格式

第一行一个整数 n,表示学生的个数。

第 2 行到第 n+1 行,每行 2 个用空格隔开的非负整数,第 i+1 行的两个数依次表示学号为 i 的同学的算法训练营、数据结构训练营的总评成绩。

输出格式

输出包含 n+1 行。

前 n 行表示正确的排序结果,每行 4 个用空格隔开的整数,第 i 行的数依次表示排名为 i 的同学的学号、总分、算法训练营成绩、数据结构训练营成绩。

第 n+1 行一个整数,表示助教的错误排名中逆序对的数目。

样例输入

3
95 85
90 90
100 99

样例输出

3 199 100 99
1 180 95 85
2 180 90 90
2

样例解释

学号为 3 的同学总分为 199,是最高的,所以他应该排第一名。

学号为 1 的同学虽然总分与学号为 2 的同学一致,但是他的算法训练营成绩更高,所以在排名规则下更胜一筹。

原错误排名中的逆序对数目为 2 ,这些逆序对分别为 (1,3) 和 (2,3)。

数据范围

对于 25% 的数据,保证 n=3。

对于 50% 的数据,保证 n≤10。

对于另外 25% 的数据,保证所有同学的总分两两不同。

对于 100% 的数据,保证 n≤5,000 ,且保证不存在成绩完全相同的学生。

时间限制:10 sec

空间限制:256 MB

提示

[可以使用起泡排序将所有学生进行排名。]

[善良的助教提醒你,在起泡排序的过程中,每次交换都会使逆序对数目减少 1 哦!想一想,为什么?]

这道题可以设计出时间复杂度为 O(nlogn) 的算法。]

代码实现

def bubble_sort(arr):
    n = len(arr)
    inversion_count = 0
    for i in range(n):
        for j in range(0, n-i-1):
            # 如果当前学生的总分更高,或者总分相同但算法训练营成绩更高,进行交换
            if arr[j][1] < arr[j+1][1] or (arr[j][1] == arr[j+1][1] and arr[j][2] < arr[j+1][2]):
                arr[j], arr[j+1] = arr[j+1], arr[j]
                inversion_count += 1
    return inversion_count

# 输入
n = int(input())
students = []
for i in range(1, n+1):
    scores = list(map(int, input().split()))
    students.append((i, scores[0] + scores[1], scores[0], scores[1]))

# 使用气泡排序对倒序进行排序和计数
inversion_count = bubble_sort(students)

# 输出正确排名
for i in range(n):
    print(f"{students[i][0]} {students[i][1]} {students[i][2]} {students[i][3]}")

# 输出助教错误排名中的逆序对数目
print(inversion_count)

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

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

相关文章

传输频宽是啥?对网速影响有多大?

频宽&#xff0c;即WIFI频道宽度&#xff0c;又称为WIFI信道宽度&#xff0c;是WiFi Channel width的缩写。从科学的定义来说&#xff0c;Wi-Fi频道宽度&#xff0c;是指Wi-Fi无线信号在频谱上所占用的带宽大小。它决定了Wi-Fi网络的数据传输速率和稳定性&#xff0c;一般有20M…

Gas Hero Coupon NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;mingfootprint.network 数据源&#xff1a;Gas Hero Coupon NFT Collection Dashboard Gas Hero “盖世英雄” 是一个交互式的 Web3 策略游戏&#xff0c;强调社交互动&#xff0c;并与 FSL 生态系统集成&#xff0…

【java苍穹外卖项目实战一】苍穹外卖项目介绍

文章目录 1、项目介绍1、项目概述2、 产品原型3、技术选型 1、项目介绍 在开发苍穹外卖这个项目之前&#xff0c;我们需要全方位的来介绍一下当前我们学习的这个项目。接下来&#xff0c;我们将从项目简介、产品原型、技术选型三个方面来介绍苍穹外卖这个项目。 1、项目概述 …

Android矩阵Matrix动画缩放Bitmap移动手指触点到ImageView中心位置,Kotlin

Android矩阵Matrix动画缩放Bitmap移动手指触点到ImageView中心位置&#xff0c;Kotlin 借鉴 Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心&#xff0c;Kotlin&#xff08;2&#xff09;-CSDN博客 在此基础上实现手指在屏幕上点击后&…

物资捐赠管理系统

文章目录 物资捐赠管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;带走&#xff09; 物资捐赠管理系统 一、项目演示 爱心捐赠系统 二、项目介绍 基于springboot的爱心捐赠管理系统 开发语言&#xff1a…

动态SQl简单创建

创建pojo实体类&#xff0c;使用lombok注解 package com.example.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.time.LocalDate; import java.time.LocalDateTime;Data NoArgsConstructor AllArgsConstructor pu…

攻防世界——re2-cpp-is-awesome

64位 我先用虚拟机跑了一下这个程序&#xff0c;结果输出一串字符串flag ——没用 IDA打开后 F5也没有什么可看的 那我们就F12查看字符串找可疑信息 这里一下就看见了 __int64 __fastcall main(int a1, char **a2, char **a3) {char *v3; // rbx__int64 v4; // rax__int64 v…

【java苍穹外卖项目实战二】苍穹外卖环境搭建

文章目录 1、前端环境搭建2、后端环境搭建1、项目结构搭建2、Git版本控制3、数据库创建 开发环境搭建主要包含前端环境和后端环境两部分。 前端的页面我们只需要导入资料中的nginx&#xff0c; 前端页面的代码我们只需要能看懂即可。 1、前端环境搭建 前端运行环境的nginx&am…

【洛谷题解】P1075 [NOIP2012 普及组] 质因数分解

题目链接&#xff1a;[NOIP2012 普及组] 质因数分解 - 洛谷 题目难度&#xff1a;入门 涉及知识点&#xff1a;枚举&#xff08;优化&#xff09; 题意&#xff1a; 输入样例&#xff1a;21 输出样例&#xff1a;7 分析&#xff1a;枚举到小因数&#xff0c;再除a&#x…

关于CSDN的原力分增长规则,一点个人经验

本文章编写于 2024年2月9日 从2022年开始到现在&#xff0c;官方的原力分增减规则已经改过好几版了&#xff0c;有一些规则描述比较模糊&#xff0c;这里总结了一些个人经验。 原力值增长点&#xff1a; 1.每日发布文章一篇10分&#xff0c;两篇15分&#xff0c;上限15分&am…

微软AD域替代方案,助力企业摆脱hw期间被攻击的窘境

在红蓝攻防演练&#xff08;hw行动&#xff09;中&#xff0c;AD域若被攻击成功&#xff0c;是其中一个扣分最多的一项内容。每年&#xff0c;宁盾都会接到大量AD在hw期间被攻击&#xff0c;甚至是被打穿的企业客户。过去&#xff0c;企业还会借助2FA双因子认证加强OA、Exchang…

【漏洞复现】狮子鱼CMS某SQL注入漏洞

Nx01 产品简介 狮子鱼CMS&#xff08;Content Management System&#xff09;是一种网站管理系统&#xff0c;它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能&#xff0c;包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…

Python 数据可视化之山脊线图 Ridgeline Plots

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 JoyPy 是一个基于 matplotlib pandas 的单功能 Python 包&#xff0c;它的唯一目的是绘制山脊线图 Joyplots&#xff08;也称为 Ridgeline Plots&…

计算机速成课Crash Course - 30. 万维网

今天继续计算机速成课Crash Course的系列讲解。 更多技术文章&#xff0c;全网首发公众号 “摸鱼IT” 锁定 -上午11点 - &#xff0c;感谢大家关注、转发、点赞&#xff01; 计算机速成课Crash Course - 30. 万维网 (qq.com) 30. 万维网 前两集我们深入讨论了电线、信号、交…

EasyExcel操作Excel表格

一、EasyExcel介绍 1.1 介绍 EasyExcel 是一个基于 Java 的简单易用的 Excel 文件读写工具&#xff0c;它提供了一种简单而又高效的方式来读取、写入和操作 Excel 文件。EasyExcel 是阿里巴巴开源的项目&#xff0c;它旨在简化开发人员处理 Excel 文件的流程&#xff0c;使得…

Python春节倒计时:用代码迎接新年的到来!

使用Python实现春节倒计时程序 一、引言 随着科技的不断发展&#xff0c;编程已经渗透到我们生活的方方面面。今天&#xff0c;我们将使用Python编写一个春节倒计时程序&#xff0c;来感受编程与传统文化的巧妙结合。该程序将能够显示距离农历2024年春节&#xff08;大年初一…

运维高级篇-分库分表(拆分策略详解)

分库分表 介绍 问题分析 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是成指数式增长&#xff0c;若采用单数据库进行数据存 储&#xff0c;存在以下性能瓶颈&#xff1a; IO瓶颈&#xff1a;热点数据太多&#xff0c;数据库缓存不足&#xff0c;产生大量磁盘…

企业级人脸属性检测解决方案

在当今数字化、智能化的时代背景下&#xff0c;人脸识别技术已经成为众多行业不可或缺的一部分。美摄科技&#xff0c;作为人脸识别技术的领先者&#xff0c;为企业提供了一整套先进且高效的人脸属性检测解决方案。 美摄科技的人脸属性检测解决方案&#xff0c;基于深度学习算…

24 SEMC相关

文章目录 24.1 SEMC 简介24.2 SEMC 框图剖析24.2.1 通讯引脚24.2.1.1 SEMC 的片选信号24.2.1.2 数据选通信号 DQS 24.2.2 存储器控制器24.2.3 IP 命令和 AXI 命令24.2.4 驱动时钟 24.4 SEMC 初始化配置结构体24.4.1 dqsMode24.4.2 cmdTimeoutCycles24.4.3 busTimeoutCycles24.4…

Android开发 button 按钮点击两次 响应onclick方法

问题 Android开发 button 按钮点击两次 响应onclick方法 详细问题 笔者xml代码 <!-- 一个按钮 --> <Button android:id"id/button1" android:layout_width"wrap_conten…