当前位置: 首页 > news >正文

17153. 班级活动(蓝桥杯-python)

代码写法

import os
import sys

# 请在此输入您的代码

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

da = {}
flag1 = 0
flag2 = 0

for i in a:
    da[i] = da.get(i,0)+1


for i,j in da.items():
    if j == 1:
        flag1 +=1
    if j > 2:
        flag2 += j-2

if flag2 > flag1:
    print(flag2)
else:
    print(flag2 + (flag1 - flag2)//2)

代码解释:

1. 导入模块
import os
import sys
  • 这里导入了 os 和 sys 模块,但在这段代码中并没有用到它们。可能是为了后续扩展功能预留的。


2. 输入处理
n = int(input())
a = list(map(int, input().split()))
  • n = int(input())

    • 从标准输入读取一个整数 n,表示同学的总数。

    • 例如,输入 4,则 n = 4

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

    • 从标准输入读取一行,将其按空格分割成多个字符串,然后将每个字符串转换为整数,最后存储到列表 a 中。

    • 例如,输入 1 2 2 3,则 a = [1, 2, 2, 3]


3. 统计每个 id 出现的次数
da = {}
for i in a:
    da[i] = da.get(i, 0) + 1
  • da = {}

    • 创建一个空字典 da,用于存储每个 id 及其出现的次数。

  • da.get(i, 0)

    • 获取字典 da 中键为 i 的值。如果键 i 不存在,则返回默认值 0

    • 对字典da初始化为0

  • da[i] = da.get(i, 0) + 1

    • 对当前 id i 的计数加 1,并更新到字典 da 中。

  • 例子

    • 如果 a = [1, 2, 2, 3],则:

      • 第一次遍历:i = 1da = {1: 1}

      • 第二次遍历:i = 2da = {1: 1, 2: 1}

      • 第三次遍历:i = 2da = {1: 1, 2: 2}

      • 第四次遍历:i = 3da = {1: 1, 2: 2, 3: 1}


4. 统计需要修改的次数
flag1 = 0
flag2 = 0
for i, j in da.items():
    if j == 1:
        flag1 += 1
    if j > 2:
        flag2 += j - 2
  • flag1

    • 用于记录出现次数为 1 的 id 的数量。

  • flag2

    • 用于记录出现次数超过 2 的 id 的多余次数。

  • for i, j in da.items()

    • 遍历字典 da 中的每个键值对,i 是 id,j 是该 id 出现的次数。

  • if j == 1

    • 如果某个 id 出现的次数为 1,则 flag1 加 1。

  • if j > 2

    • 如果某个 id 出现的次数超过 2,则 flag2 加上多余的部分(j - 2)。

  • 例子

    • 如果 da = {1: 1, 2: 2, 3: 1}

      • 对于 i = 1j = 1flag1 = 1

      • 对于 i = 2j = 2:不满足 j == 1 或 j > 2,跳过。

      • 对于 i = 3j = 1flag1 = 2

      • 最终 flag1 = 2flag2 = 0


5. 计算最终需要修改的次数
if flag2 > flag1:
    print(flag2)
else:
    print(flag2 + (flag1 - flag2) // 2)
  • if flag2 > flag1

    • 如果 flag2(多余次数)大于 flag1(单独 id 的数量),则直接输出 flag2

    • 因为多余的部分可以直接用来覆盖单独的部分。

  • else

    • 如果 flag2 小于等于 flag1,则需要将 flag2 全部用于覆盖单独的部分,剩下的单独部分需要两两配对修改。

    • 计算方式为:flag2 + (flag1 - flag2) // 2

    • //向下取整

  • 例子

    • 如果 flag1 = 2flag2 = 0

      • 输出 0 + (2 - 0) // 2 = 1

    • 如果 flag1 = 1flag2 = 3

      • 输出 3

相关文章:

  • CAN FD、传统CAN以及RS-485通信介绍
  • <C#> 详细介绍.net 三种依赖注入:AddTransient、AddScoped、AddSingleton 的区别
  • 如何在 Vue 项目中实现动态组件加载,有什么应用场景?
  • 又双叒叕Scrapy爬虫相关的面试题及详细解答
  • C++11 引入了的新特性与实例说明
  • Prometheus Exporter系列-Mysql_Exporter一键部署
  • 《认知天性:让学习轻而易举的心理学规律》读书笔记
  • vLLM 同时部署多个模型及调用
  • PostgreSQL_安装
  • Powershell美术资产批量重命名
  • JavaScript基础-Web APIs 和 JS 基础关联性
  • C++相关基础概念之入门讲解(下)
  • Java 二维数组元素降序排序(非冒泡排序)
  • 【JavaEE进阶】Linux常用命令
  • Day20-前端Web案例——部门管理
  • MySQL 性能优化方向
  • 类加载器、双亲委派
  • Jetpack Compose 显示时间
  • 深入Python C API:掌握常用函数与实战技巧
  • 星越L_驾驶模式讲解
  • 跳水世界杯总决赛:程子龙/朱子锋夺男子双人10米台冠军
  • 澎湃读报丨央媒头版头条集中刊发:大国应有的样子
  • 人民日报:上海“模速空间”何以汇聚超百家大模型企业
  • 乌美签署矿产协议
  • 司法服务保障西部陆海新通道建设,最高法专门发文
  • 日本希望再次租借大熊猫,外交部:双方就相关合作保持密切沟通