首页 > 其他分享 >L2-007 家庭房产

L2-007 家庭房产

时间:2024-06-03 18:59:26浏览次数:7  
标签:father young lst L2 祖宗 房产 007 find

给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。

输入格式:

输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产:

编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积

其中编号是每个人独有的一个4位数的编号;分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数;孩子i是其子女的编号。

输出格式:

首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输出每个家庭的信息:

家庭成员的最小编号 家庭人口数 人均房产套数 人均房产面积

其中人均值要求保留小数点后3位。家庭信息首先按人均面积降序输出,若有并列,则按成员编号的升序输出。

输入样例:

10
6666 5551 5552 1 7777 1 100
1234 5678 9012 1 0002 2 300
8888 -1 -1 0 1 1000
2468 0001 0004 1 2222 1 500
7777 6666 -1 0 2 300
3721 -1 -1 1 2333 2 150
9012 -1 -1 3 1236 1235 1234 1 100
1235 5678 9012 0 1 50
2222 1236 2468 2 6661 6662 1 300
2333 -1 3721 3 6661 6662 6663 1 100

输出样例:

3
8888 1 1.000 1000.000
0001 15 0.600 100.000
5551 4 0.750 100.000

分析:

并查集,让每组数据的lst[0]的祖宗成为这组数据中所有成员的祖宗的祖宗

需要注意的是某个成员在循环过程中的身份会发生变化,一开始可能是一个家庭的祖宗,右面又会出现新的祖宗,但在循环过程中房产套数和房产面积仍在该成员的名下,因此在需要将该成员的房产套数和房产面积添加到他祖宗的名下

python实现: 

# 定义find函数来寻找当前成员的祖宗
def find(p):
    if father[p] == p:  # 自己是祖宗,则直接返回自己
        return p
    else:
        return find(father[p])  # 自己不是,则继续寻找祖宗的祖宗


father = [i for i in range(10000)]  # 每个成员的祖宗
num = [0] * 10000  # 每个成员房产套数
mj = [0] * 10000  # 每个成员的房产面积
check = [0] * 10000  # 检查该成员编号在题目中是否出现过
young = [i for i in range(10000)]  # 成员所在家庭的家庭成员的最小编号

n = int(input())
for i in range(n):
    lst = list(map(int, input().split()))
    check[lst[0]] = 1

    # 让lst[0]的祖宗成为这组数据中所有成员的祖宗的祖宗并记录出现的最小编号
    if lst[1] != -1:
        check[lst[1]] = 1
        if young[find(lst[1])] < young[find(lst[0])]:
            young[find(lst[0])] = young[find(lst[1])]
        father[find(lst[1])] = father[find(lst[0])]
    if lst[2] != -1:
        check[lst[2]] = 1
        if young[find(lst[2])] < young[find(lst[0])]:
            young[find(lst[0])] = young[find(lst[2])]
        father[find(lst[2])] = father[find(lst[0])]
    for j in range(lst[3]):
        check[lst[4 + j]] = 1
        if young[find(lst[4 + j])] < young[find(lst[0])]:
            young[find(lst[0])] = young[find(lst[4 + j])]
        father[find(lst[4 + j])] = father[find(lst[0])]

    # 把房产添加到lst[0]的祖宗的名下
    num[father[find(lst[0])]] += lst[4 + lst[3]]
    mj[father[find(lst[0])]] += lst[5 + lst[3]]

dic = {}  # {祖宗: 该家庭的成员人数}
for i in range(10000):
    if check[i]:  # 判断该成员编号是否在题目中出现过
        dic[find(i)] = dic.get(find(i), 0) + 1

        # 如果该成员不是祖宗,那么把他的房产添加到他祖宗的名下
        if i != find(i):
            num[find(i)] += num[i]
            mj[find(i)] += mj[i]

res = []
for i in range(10000):
    if i == find(i) and check[i]:  # 如果该成员编号在题目中出现过且是祖宗,则把需要输出的信息添加到res中
        res.append([young[i], dic[i], num[i] / dic[i], mj[i] / dic[i]])

res.sort(key=lambda x: x[0])  # 按成员编号的升序
res.sort(key=lambda x: x[3], reverse=True)  # 按人均面积降序

print(len(res))
for x in res:
    print(f"{x[0]:04} {x[1]} {x[2]:.3f} {x[3]:.3f}")

标签:father,young,lst,L2,祖宗,房产,007,find
From: https://blog.csdn.net/zjl_hui/article/details/139421365

相关文章

  • HTML20_HTML表单标签4
    一、概念用于采集用户输入的数据的。用于和服务器进行交互。二、form标签用于定义表单的。可以定义一个范围,范围代表采集用户数据的范围1、form属性:action:指定提交数据的URLmethod:指定提交方式......
  • RGMII接口--->(007)FPGA实现RGMII接口(七)
     (007)FPGA实现RGMII接口(七)1目录(a)FPGA简介(b)IC简介(c)Verilog简介(d)FPGA实现RGMII接口(七)(e)结束1FPGA简介(a)FPGA(FieldProgrammableGateArray)是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定......
  • WSL2--DNS解析问题解决
    1.问题xurong@DESKTOP-SOE9MG1:~/.ssh$sudoaptupdateIgn:1http://security.ubuntu.com/ubuntunoble-securityInReleaseIgn:2http://archive.ubuntu.com/ubuntunobleInReleaseIgn:3http://archive.ubuntu.com/ubuntunoble-updatesInReleaseIgn:4http://archive......
  • 房产证上加名?手把手教你操作,省钱又省心!
    随着《民法典》的实施,房产的权属问题愈发受到重视。夫妻双方及其亲属常希望能在房产证上增添自己的名字,以保障各自的权益。那么,房产证上到底能写几个名字呢?以下是对这一问题的详细解答。一、房产证命名无固定限制在购房时,房产证上可以写上任意数量的人名,没有具体的限制。但......
  • L2-014 列车调度(二分法)
    1.题目L2-014列车调度分数25全屏浏览切换布局作者陈越单位浙江大学火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在......
  • L2-013 红色警报(并查集)
    1.题目L2-013红色警报分数25全屏浏览切换布局作者陈越单位浙江大学战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城......
  • L2-043 龙龙送外卖(C++, 记忆化搜索)
    龙龙是“饱了呀”外卖软件的注册骑手,负责送帕特小区的外卖。帕特小区的构造非常特别,都是双向道路且没有构成环——你可以简单地认为小区的路构成了一棵树,根结点是外卖站,树上的结点就是要送餐的地址。每到中午12点,帕特小区就进入了点餐高峰。一开始,只有一两个地方点外卖,龙......
  • HTML20_HTML标签3
    一、文件标签构成html最基本的标签html:html文档的根标签head:头标签。用于指定html文档的一些属性。引入外部的资源title:标题标签。body:体标签<!DOCTYPEhtml>:html5中定义该文档是html文档二、文本标签和文本有关的标签1、标签注释:<!--注释内容--><h1>to<......
  • HTML20_HTML入门2
    一、HTML概念是最基础的网页开发语言HyperTextMarkupLanguage超文本标记语言 *超文本: *超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本. *标记语言: *由标签构成的语言。<标签名称>如html,xml *......
  • 安装fail2ban服务-防止用户暴力破解root密码
    安装fail2ban服务,防止用户暴力破解root密码(最多让试着登录5次,5次密码输错就封杀ip)[root@bogon~]#lsepel-release-6-8.noarch.rpm[root@bogon~]#rpm-ivhepel-release-6-8.noarch.rpm #或yum-yinstallepel-release[root@bogon~]#yuminstallfail2ban-y复制ja......