【PAT】A1114 Family Property (25 point(s))
文章目录
- A1114 Family Property (25 point(s))
- Input Specification:
- Output Specification:
- Sample Input:
- Sample Output:
- Code
- Analysis
Author: CHEN, Yue
Organization: 浙江大学
Time Limit: 200 ms
Memory Limit: 64 MB
Code Size Limit: 16 KB
A1114 Family Property (25 point(s))
This time, you are supposed to help us collect the data for family-owned property. Given each person’s family members, and the estate(房产)info under his/her own name, we need to know the size of each family, and the average area and number of sets of their real estate.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤1000). Then N lines follow, each gives the infomation of a person who owns estate in the format:
ID Father Mother k Child1 ⋯Childk Mestate Area
where ID is a unique 4-digit identification number for each person; Father and Mother are the ID’s of this person’s parents (if a parent has passed away, -1 will be given instead); k (0≤k≤5) is the number of children of this person; Childi 's are the ID’s of his/her children; Mestate is the total number of sets of the real estate under his/her name; and Area is the total area of his/her estate.
Output Specification:
For each case, first print in a line the number of families (all the people that are related directly or indirectly are considered in the same family). Then output the family info in the format:
ID M AVGsets AVGarea
where ID is the smallest ID in the family; M is the total number of family members; AVGsets
is the average number of sets of their real estate; and AVGarea is the average area. The average numbers must be accurate up to 3 decimal places. The families must be given in descending order of their average areas, and in ascending order of the ID’s if there is a tie.
Sample Input:
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
Sample Output:
3
8888 1 1.000 1000.000
0001 15 0.600 100.000
5551 4 0.750 100.000
Code
#include <stdio.h>
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
struct NODE{int id;double aveares,aveestate;
};
bool cmp(NODE a,NODE b){if(a.aveares==b.aveares) return a.id<b.id;else return a.aveares>b.aveares;
}
map<int, int> estate,are;
int father[10000],cluCnt[10000],appear[10000];
vector<int> root,familymenber[10000];
vector<NODE> res;
int findFather(int x){if(x==father[x]) return x;else{int F=findFather(father[x]);father[x]=F;return F;}
}
void Union(int a,int b){int faA=findFather(a),faB=findFather(b);if(faA!=faB) father[faA]=faB;
}
int main(){int n,id,fa,mo,k,child,mestate,area;scanf("%d",&n);for(int i=0;i<10000;i++) father[i]=i;for(int i=0;i<n;i++){scanf("%d %d %d %d",&id,&fa,&mo,&k);appear[id]=1;if(mo!=-1){Union(id,mo);appear[mo]=1;}if(fa!=-1){Union(id,fa);appear[fa]=1;}for(int j=0;j<k;j++){scanf("%d",&child);Union(child,id);appear[child]=1;}scanf("%d %d",&mestate,&area);estate[id]=mestate;are[id]=area;}for(int i=0;i<10000;i++){if(appear[findFather(i)]==1){cluCnt[findFather(i)]++; //对一个集合中的元素计数,存在编号根节点编号的位置familymenber[findFather(i)].push_back(i); //将一个集合的元素存在一起(为了取编号最小)}}for(int i=0;i<10000;i++){if(cluCnt[i]>0){root.push_back(i);}}for(int i=0;i<root.size();i++){sort(familymenber[root[i]].begin(),familymenber[root[i]].end());NODE temp;temp.id=familymenber[root[i]][0];temp.aveares=0;temp.aveestate=0;for(int j=0;j<10000;j++){if(findFather(j)==root[i]){temp.aveestate+=estate[j];temp.aveares+=are[j];}}temp.aveares=(double)temp.aveares/cluCnt[root[i]];temp.aveestate=(double)temp.aveestate/cluCnt[root[i]];res.push_back(temp);}sort(res.begin(),res.end(),cmp);printf("%d\n",root.size());for(int i=0;i<res.size();i++){printf("%.4d %d %.3f %.3f\n",res[i].id,cluCnt[findFather(res[i].id)],res[i].aveestate,res[i].aveares);}return 0;
}
Analysis
-已知每个家庭的父母,孩子,其自己名下的房产数和名下房产面积。
-求每个家庭的中最小ID号以及人口数,人均房产面积和房产套数。
【PAT】A1114 Family Property (25 point(s))相关推荐
- 【PAT】B1055 集体照(25 分)
很简单的two points问题 ##注意:K是行数 #include<stdio.h> #include<string.h> #include<map> #inc ...
- 【PAT】1121. Damn Single (25)【哈希表】
题目描述 "Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are ...
- 【PAT】乙级题目解答合集(c++)
[PAT]乙级题目解答合集(c++) 本篇文章为对PAT乙级1001-1095的题目解答的汇总 1001 害死人不偿命的(3n+1)猜想 (15 分) 1002 写出这个数 (20 分) 1003 我 ...
- 【LeetCode】剑指 Offer 25. 合并两个排序的链表
[LeetCode]剑指 Offer 25. 合并两个排序的链表 文章目录 [LeetCode]剑指 Offer 25. 合并两个排序的链表 一.递归 二.伪头节点 总结 一.递归 思路: 如果有一个 ...
- 【PAT】第四章 算法初步
第四章 算法初步 目录 第四章 算法初步 4.1 排序 4.1.1 选择排序 4.1.2 插入排序 4.1.3 排序题与sort函数的应用 strcmp 计算排名 4.2 散列 4.2.1 散列 1. ...
- 【PAT】PAT总结《搜索、打表、分治、排序算法、队列、栈、堆、Hash》
打表 打表这个技巧其实我们在素数部分的题已经涉及到了.还是要仔细思考,什么时候应该打表,打表有助于减少后续的计算的时候,我们应该打表, 特别是查询量特别大,即时计算无论多么快都会超时的情况.或者逆向运 ...
- 【置顶】【PAT】PAT甲级题目及分类总结(持续更新ing)
在2019年3月底,我决定考浙大计院,经过一个月还算凑合的学习,痛定思痛,决定整理整理自己的博客. 粗略估计,大概一个月的时间里我AC了31道题,大概用时40个小时上下,毕竟还要把大部分时间花在笔试上 ...
- 【PAT】(B)1094 谷歌的招聘 (20 分)
『题意描述』 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是 ...
- 【PAT】乙级 1040 有几个PAT (25 分) c++
1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位 ...
最新文章
- 常考数据结构和算法:设计LRU缓存结构
- 知识图谱数据构建的“硬骨头”,阿里工程师如何拿下?
- 验证码广告:站长增加收入新渠道
- linux 常用命令05 常用的压缩与解压缩文件
- spring mvc学习(15)Referenced file contains errors
- 年薪15W的程序员因为掌握这个技能,薪资翻倍!
- yarn vite vue3.x
- 为什么持续集成和部署在开发中非常重要?
- zabbix批量操作
- 自定义Flash背景的相关设置方法以及其与目录下的文件的对应关系
- java连接FTP下载文件
- 投影机拼接融合技术--UE4拼接
- 7种大屏设计与布局思路,你不知道就亏了
- Java task类需要自己销毁_并发编程之线程创建到销毁、常用API
- 免证书发布ipa文件真机测试
- 学习u3d的几个工具和文档
- android studio 56 下载网络歌曲 代码
- Hadoop-感知网络布局和机架的设计
- Typewriter text that fits label beforehand
- 电子现金 圈存、补登
热门文章
- Word中插入手写体签名
- 【Linux学习】信号——信号保存 | 信号处理 | 不可重入函数,volatile,SIGCHLD信号
- mysql储存大文本_mysql 的大文本存储TEXT BLOB
- CVPR2019文章解读 Pyramid Feature Attention Network for Saliency detection 用于显著性检测的金字塔特征注意网络
- Linux-5.10源代码之网络系统简介:
- ppt如何转换成pdf
- javascript错误_JavaScript开发人员最常犯的10个错误
- Android调用系统设置界面
- MatLab 画图方法
- Android App收不到推送的消息