Python:最少刷题数

article/2024/7/17 3:44:51

问题描述

小蓝老师教的编程课有 N 名学生, 编号依次是 1…N 。第 i 号学生这学期 刷题的数量是 Ai​ 。

对于每一名学生, 请你计算他至少还要再刷多少道题, 才能使得全班刷题 比他多的学生数不超过刷题比他少的学生数。

输入格式

第一行包含一个正整数 N 。

第二行包含 N 个整数: A1​,A2​,A3​,…,AN​.

输出格式

输出 N 个整数, 依次表示第 1…N 号学生分别至少还要再刷多少道题。

样例输入

5
12 10 15 20 6

样例输出

0 3 0 0 7

评测用例规模与约定

对于 30% 的数据,  1 ≤ N ≤ 1000,0 ≤ Ai​ ≤ 1000.

对于 100% 的数据, 1 ≤ N ≤ 100000,0 ≤ Ai​ ≤ 100000.

思路:

例:12 10 15 14 6

A123456789101112131415
B000001000101011
C000001111223345

B:代表样例中所有的刷题个数

刷题数目比自己小的人数不少于成绩比刷题数目自己大的人数的最小刷题数。 用数组记录每个成绩出现的次数 ,然后维护成绩的前缀和,并遍历遍历数组,如果当前刷题数目比自己小的人数不少于刷题数目比自己大的人数 ,我们把此类学生定义为合法学生,即不用进行任何操作就可以满足要求。
反之,我们要分析不合法学生变成合法学生的最小刷题数,首先我们要找到一个当前刷题数目比自己小的人数多于刷题数目比自己大的合法学生的最小刷题数目,定义为通过刷题可以成为合法学生的所需的最小成绩。

参考代码:

num = int(input())
lis = list(map(int,input().split()))
maxn = max(lis)
N=100001
cnt = [0 for i in range(N)]
for i in range(num):cnt[lis[i]]+=1
for i in range(1,N):cnt[i] += cnt[i-1]
pos = -1
pos1 = -1
for i in range(1,N):if cnt[i-1] >= num - cnt[i]:   #不用刷题if pos1 == -1 :pos1 = iif cnt[i-1] - 1 >= num - cnt[i]: #需要刷题if pos == -1:pos = ibreak
if pos == -1:for i in range(num):print(0,end = ' ')
else:for i in range(num):if lis[i] >= pos1:print(0,end = ' ')else:print(pos-lis[i],end = ' ')


http://www.ngui.cc/article/show-862283.html

相关文章

c语言指针应用

1、数组元素的指针变量 &#xff08;1&#xff09;、数组元素的指针变量 和 数组名&#xff08;作为地址&#xff09;等价 #include <stdio.h> void test() {int arr[5] {10, 23, 7, 5, 56};int n sizeof(arr) / sizeof(arr[0]);for (int i 0; i < n; i){printf(&…

RDD 持久化

文章目录RDD 持久化1、RDD Cache 缓存2、持久化的作用3、RDD ChechPoint 检查点1) 说明2) 代码示例4、Cache & Persist & Checkpoint 区别RDD 持久化 1、RDD Cache 缓存 RDD 通过 Cache 或者 Persist 方法将前面的计算结果缓存&#xff0c;默认情况下会把数据以缓存在…

手机号和座机号正则表达式

phoneInputBlur (e, record) { const { value } e.target const reg /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}KaTeX parse error: Expected EOF, got & at position 26: … (value ! &̲& value ! nul…message.warn(‘手机号格式不正确&#xff0c…

超详细——入门Github的代码上传

Github的使用与Gitee相差无几&#xff0c;由于网速原因&#xff0c;国内开发者主要使用Gitee作为版本管理器&#xff0c;但有些场景及项目需要用到Github&#xff0c;今天我将对Github的使用制作一个简单的初学者入门教程&#xff0c;不足之处恳请指正。 一、创建代码仓库 1.…

Go第 17 章 :反射

Go第 17 章 &#xff1a;反射 17.1 先看一个问题&#xff0c;反射的使用场景 17.2 使用反射机制&#xff0c;编写函数的适配器, 桥连接 17.3 反射的基本介绍 17.3.1 基本介绍 反射可以在运行时动态获取变量的各种信息, 比如变量的类型(type)&#xff0c;类别(kind)如果是结构…

远力集团,到底是如何成为中国城市产业发展新引擎的?

随着全国城市经济竞争愈演愈烈&#xff0c;如何提升城市对人才、企业等资源的吸引力、对周边区域经济的带动力&#xff0c;成为城市之间互相竞争的焦点话题。作为城市经济发展的核心动力引擎&#xff0c;产业建设是城市提升综合竞争力的一项重要工作。一个城市如能顺利打造产业…

day02_第一个Java程序

在开发第一个Java程序之前&#xff0c;我们必须对计算机的一些基础知识进行了解。 常用DOS命令 Java语言的初学者&#xff0c;学习一些DOS命令&#xff0c;会非常有帮助。DOS是一个早期的操作系统&#xff0c;现在已经被Windows系统取代&#xff0c;对于我们开发人员&#xf…

顺序表和单向链表练习

/*单向链表练习: 链表中存储数据类型为字符申&#xff0c;请完成以下功能 1.在堆区申请空间 2.实现头插、头删、尾插、尾删 3&#xff0c;遍历链表 4.在任意位置插入 5&#xff0c;任意位置删除 6,按元素修改 7,按元素查找 8.单向链表逆置 9,链表降序排序 10&#x…

04-String、StringBuffer和 StringBuilder的区别?

1.String 为什么是不可变的 简单的来说&#xff1a;String 类中使用 final 关键字字符数组保存字符串&#xff0c;private final char value[]&#xff0c;所以String 对象是不可变的。 而 StringBuilder 与StringBuffer 都继承自 AbstractStringBuilder 类&#xff0c;在 A…

输出sprintf snprintf sprintf_s和输入scanf sscanf函数使用详解

一、sprintf snprintf sprintf_s函数使用众所周知,sprintf不能检查目标字符串的长度&#xff0c;可能造成众多安全问题,所以都会推荐使用snprintf.自从snprintf代替了sprintf&#xff0c;相信大家对snprintf的使用都不会少。linux和windows下是不同的。linux下用的是snprintf()…