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

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


http://www.kler.cn/a/595661.html

相关文章:

  • 在 Kubernetes(k8s)部署过程中常见的问题
  • YOLO-UniOW: 高效通用开放世界目标检测模型【附论文与源码】
  • OpenHarmony子系统开发 - 电源管理(一)
  • JDK 24 发布,新特性解读!
  • 基于OFDM+16QAM+Turbo的车联网V2X通信系统matlab性能仿真,对比RS
  • 使用 Selenium 控制现有 Edge 窗口以规避爬虫检测
  • 如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析
  • 炫酷的3D按钮效果实现 - CSS3高级特性应用
  • 大数据点燃智能制造变革之火——从数据到价值的跃迁
  • PostgreSQL_数据下载并保存(psycopg2)
  • 关于 2>/dev/null 的作用以及机理
  • github代理 | 快速clone项目
  • 云计算赛题私有云服务搭建题目
  • 【动态规划】详解混合背包问题
  • 云原生网络拓扑:服务网格的量子纠缠效应
  • 鸿蒙ArkTS+ArkUI实现五子棋游戏
  • 2025 centos系统安装docker并迁移docker,docker安装到指定的目录以及文件迁移,docker迁移文件
  • Redis数据类型详解
  • 用 .net Core 实现简单的缓存,在小型单体项目中替代Redis
  • 【Java SE】抽象类/方法、模板设计模式