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

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

img

img

这是我的代码

#include 
#include 
#include 
using namespace std;
struct family{
    int id, num;
    double avehouse, avearea;
    bool operator <(family &b){
        cout<"dd"<if(b.num*avearea == num*b.avearea){
            return idelse 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;jif(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<for(int i=0;iprintf("%.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

您看看这个:https://blog.csdn.net/weixin_45256307/article/details/129102714