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