我照着csdn上某个代码写的,为什么他的代码是满分,而我只得了两分,求指点
这是我的代码
#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