IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> L2-007 家庭房产 (25 分)python -> 正文阅读

[Python知识库]L2-007 家庭房产 (25 分)python

L2-007 家庭房产 (25 分)python

前言

因为本人属于新手,所以代码比较乱,但主要是用到了几个知识点。

1.并查集

这里我就不仔细讲了,有一个大佬用很有趣的方式讲解了。

并查集

2.sort函数和cmp函数结合

这个就是我们的排序sort函数,如果当我们有两个选项,身高和年龄。

题目要求身高高的排在前面,如果身高一样的就年龄大的排在前面,这个时候我们就可以使用我们的cmp。

3.set直接求交集比较方便

2.分数

在这里插入图片描述

4检查点比较难过,如果不适用数据结构久荣超时,他的条件就是人数和孩子都取最大N和k

3.思路

1.初始化

我们就根据并差级的思想把同一组人的老大设置为父亲也就是妈妈的老大也是父亲,孩子的老大也是父亲,本人的老大也是父亲,孩子的孩子等等如此,首先第一遍先把每组遍历一遍,但是这样肯定会不完全,因为前面组的老大没有更新,或者后来的几组的老大没有关联上,所以我们结束一遍之后要再遍历一遍。

这次遍历的意义就是因为我们知道一组的本人父亲和母亲还有孩子可能不对应一个老大,但是既然出现再一个家族他们就对应一个老大,我们要他们都收到一个家族里面来,让他们每一个人都对应老大,我们就规定每组的本人的老大为全组的老大。

2.收集信息

这个就比较简单了前面我们再初始化的同时也记录了每组的房产数和房产价值,这次我们就进行遍历,因为每组的所有人的老大都是一个,只要收集整个所有组里面不同老大的个数,并用字典记录他们,每找到一个相同的老大组,就把两个组合并到一起用set的求并集这样,不会有重复,直接统计出同一个老大的所有组,化成一个大组,也就对应题目的家族。其他总人数,平均房产,还是平均价值就好算了。

3.比较

我们把我们收集好的几大家族信息放到列表里面,利用sort和cmp自定义函数结合,进行排序就ok了。

4.代码

代码写的比较烂,好多地方没有优化,都是直接想到哪写到哪的,因为天梯赛一般不限制内存要求,所以就舒服着随便开了字典和列表。

from functools import cmp_to_key

dic = {} 
dic2 = {}
dic3 = {}
def xy_cmp(x, y):
    if x[3] > y[3]:
        return 1
    elif x[3] == y[3]:
        if x[0] < y[0]:
            return 1
        else:
            return -1
    else:
        return -1

def change(key):
    if key in dic:
        if key == dic[key]:
            return key
        key = change(dic[key])
        return key
    else:
        return key

num = int(input())
li = []
mon = []
for i in range(num):
    s = input()
    s = s.split()
    a = []
    for j in range(3):
        if s[j] != '-1':
            a.append(s[j])
    p = 4
    for j in range(int(s[3])):
        a.append(s[p])
        p += 1
    mon.append([int(s[-2]), int(s[-1])])
    li.append(a)
    if s[1] == '-1' and s[2] == '-1':
        flag = s[0]
    elif s[1] == '-1' and s[2] != '-1':
        flag = s[2]
    else:
        flag = s[1]
    for val in a:
        dic[val] = change(flag)
for i, val in enumerate(li):
    flag = change(val[0])
    for key in val:
        if dic[key] != flag:
            dic[dic[key]] = change(flag)
        dic[key] = change(flag)
for i, val in enumerate(li):
    flag = dic[val[0]]
    if flag not in dic2:
        dic2[flag] = set(val)
        dic3[flag] = [min(val),mon[i][0],mon[i][1]]
    else:
        dic2[flag] = dic2[flag] | set(val)
        dic3[flag] = [min(dic2[flag]),mon[i][0]+dic3[flag][1],mon[i][1]+dic3[flag][2]]

mon = []
for key in dic2:
    a = len(dic2[key])
    mon.append([dic3[key][0], a, dic3[key][1]/a,dic3[key][2]/a])
mon.sort(key=cmp_to_key(xy_cmp), reverse=True)
print(len(mon))
for i in mon:
    print(i[0], i[1], end=' ')
    print('%.3f' % i[2], end=' ')
    print('%.3f' % i[3])


  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:36:49  更:2022-04-18 17:41:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:06:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码