zoukankan      html  css  js  c++  java
  • 家庭房产(模拟)

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

    输入格式:

    输入第一行给出一个正整数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
     1 #include <bits/stdc++.h>
     2 const int INF=0x3f3f3f3f;
     3 typedef long long LL;
     4 const double eps =1e-8;
     5 const int mod=1e9+7;
     6 const int maxn=1e5+10;
     7 using namespace std;
     8 
     9 int vis[10005];
    10 int fa[10005];
    11 int son[10005];
    12 int tao[10005];
    13 int S[10005];
    14 set<int> st;
    15 
    16 struct node
    17 {
    18     int id;
    19     int ch;
    20     double num;
    21     double S;
    22 }P[10005];
    23 
    24 int Find(int x)
    25 {
    26     return x==fa[x]? x:fa[x]=Find(fa[x]);
    27 }
    28 
    29 void Union(int a,int b)
    30 {
    31     int aa=Find(a);
    32     int bb=Find(b);
    33     if(aa!=bb) aa<bb?fa[bb]=aa:fa[aa]=bb;
    34 }
    35 
    36 bool cmp(node a,node b)
    37 {
    38     if(a.S==b.S) return a.id<b.id;
    39     else return a.S>b.S;
    40 }
    41 
    42 int main()
    43 {
    44     #ifdef DEBUG
    45     freopen("sample.txt","r",stdin);
    46     #endif
    47     
    48     int n;
    49     scanf("%d",&n);
    50     memset(son,0,sizeof(son)); 
    51     for(int i=1;i<=10004;i++) //注意i不是<=n 
    52         fa[i]=i;
    53     for(int i=1;i<=n;i++)
    54     {
    55         int me,u1,u2,m;
    56         scanf("%d %d %d %d",&me,&u1,&u2,&m);
    57         vis[me]=1;
    58         if(u1!=-1) Union(u1,me),vis[u1]=1;
    59         if(u2!=-1) Union(u2,me),vis[u2]=1;
    60         for(int i=1;i<=m;i++)
    61         {
    62             int x;
    63             scanf("%d",&x);
    64             Union(me,x),vis[x]=1;
    65         }
    66         scanf("%d %d",&tao[me],&S[me]);
    67         
    68     }
    69     for(int i=0;i<=10004;i++)//注意i从0开始 
    70     {
    71         if(vis[i])
    72         {
    73             int t=Find(i);
    74             son[t]++;
    75             st.insert(t);
    76             if(t==i) continue;
    77             tao[t]+=tao[i];
    78             S[t]+=S[i];
    79             
    80         }
    81     }
    82     int num=0;
    83     for(auto v:st)
    84     {
    85         ++num;
    86         P[num].id=v;
    87         P[num].ch=son[v];
    88         P[num].num=tao[v]*1.0/(double)son[v];
    89         P[num].S=S[v]*1.0/(double)son[v];
    90     }
    91     sort(P+1,P+1+num,cmp);
    92     printf("%d
    ",num);
    93     for(int i=1;i<=num;i++)
    94     {
    95         printf("%04d %d %.3f %.3f
    ",P[i].id,P[i].ch,P[i].num,P[i].S);
    96     }
    97     
    98     return 0;
    99 }

    -

  • 相关阅读:
    利用百度轻松语音合成,语音识别
    python圆周率计算小程序(非常慢)
    python成语接龙小游戏
    在数组添加元素时报错:IndexError: list index out of range
    Redis-jedis的使用
    Shiro整合SpringMVC简单实例(一)
    容器
    防重提交功能(Token技术的引入)
    PageUtil
    单例设计模式
  • 原文地址:https://www.cnblogs.com/jiamian/p/12484115.html
Copyright © 2011-2022 走看看