257s 2023-03-01 17:30 采纳率: 86.7%
浏览 48
已结题

关于#蓝桥杯#的问题,如何解决?(语言-c++)

我照着csdn上某个代码写的,为什么他的代码是满分,而我只得了两分,求指点

img

img

这是我的代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct family{
    int id, num;
    double avehouse, avearea;
    bool operator <(family &b){
        cout<<b.id<<"dd"<<id<<endl;
        if(b.num*avearea == num*b.avearea){
            return id<b.id;
        }
        else return b.num*avearea > num*b.avearea;
    }
};
struct member{
    int house, area;
    member(){ house = area = 0;}
};
member m[10010];
family ans[10010];
int f[10010];
bool dev[10010];
bool vv[10010];
void init(){
    memset(dev,0,sizeof(dev));
    memset(dev,0,sizeof(dev));
    for(int i=0;i<10000;i++){
        f[i] = i;
    }
}
int find(int x){
    if(f[x] == x) return x;
    else{
        f[x] = find(f[x]);
        return f[x];
    }
}
void merge(int x, int y){
    x = find(x);
    y = find(y);
    if(x!=y){
        f[y] = x;
    }
}
int main(){
    int n;
    int zj,fa,ma,kidnum,kid;
    init();
    cin>>n;
    while(n--){
        cin>>zj>>fa>>ma;
        dev[zj] = 1;
        if(fa!=-1){
            merge(zj,fa);
            dev[fa] = 1;
        }
        if(ma!=-1){
            merge(zj,ma);
            dev[ma] = 1;
        }
        cin>>kidnum;
        while(kidnum--){
            cin>>kid;
            dev[kid] = 1;
            merge(zj,kid);
        }
        cin>>m[zj].house>>m[zj].area;
    }
    int top=0;
    for(int i=0;i<10000;i++){
        if(dev[i]){
            int x = find(i);
            if(vv[x]){
                for(int j=0;j<top;j++){
                    if(find(ans[j].id) == x){
                        ans[j].num++;
                        ans[j].avehouse += m[i].house;
                        ans[j].avearea +=m[i].area;
                        break;
                    }
                }
            }else {
                vv[x] = 1;
                ans[top].id = i;
                ans[top].num = 1;
                ans[top].avehouse = ans[top].avearea = 0;
                ans[top].avehouse += m[i].house;
                ans[top].avearea += m[i].area;
                top++;
            }
        }
    }
    sort(ans,ans+top);
    cout<<top<<endl;
    for(int i=0;i<top;i++){
        printf("%.04d %d %.3lf %.3lf\n",ans[i].id,ans[i].num,(1.0)*ans[i].avehouse/ans[i].num,(1.0)*ans[i].avearea/ans[i].num);

    }
    return 0;
}


这是他的代码http://t.csdn.cn/fLW8i

  • 写回答

2条回答 默认 最新

  • 我爱OJ 2023-03-01 19:10
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 创建了问题 3月1日

悬赏问题

  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan