目录
题目链接:
思路:
坑一:
坑二:
坑三:
代码:
通过10%:
通过80%:
通过100%:
题目链接:
P1093 - 分香蕉 - New Online Judge (ecustacm.cn)
思路:
结构体排序
坑一:
对结构体不熟练
回顾相关知识点:一定要多复习几遍
c语言基础语法六——结构体(完结)-CSDN博客
坑二:
最后是“按照输入顺序”输出对应猴子对应的香蕉总数。
所以要提前把输入序号记下来,最后恢复,然后再输出。
坑三:
记得break
代码:
通过10%:
原因:没看清题,人家要按原来的输入顺序输出!!!
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+3;
int banana[N];struct monkey{int weight;int sum;
}monk[N];bool cmp(monkey A,monkey B){if(A.weight>B.weight){return true;}else return false;
}int main(){int n,m;cin>>n>>m;for(int i=0;i<n;i++){cin>>banana[i]; //banana[i]表示第i个香蕉的质量}for(int i=0;i<m;i++){cin>>monk[i].weight; //monkey[i]表示第i个猴子的体重monk[i].sum=0; //monkey[i]表示第i个猴子获得的香蕉的质量之和}sort(banana,banana+n,greater<int>());//sort(monkey,monkey+n,greater<int>()); //注意greater适用的是int的,所以结构体的比较不适用sort(monk,monk+m,cmp);for(int i=0;i<n;){for(int j=0;j<m;j++){monk[j].sum+=banana[i];i++;}}for(int i=0;i<m;i++){cout<<monk[i].sum<<" ";}return 0;
}
通过80%:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+3;
int banana[N];struct monkey{int weight;int sum;int id;
}monk[N];bool cmp(monkey A,monkey B){if(A.weight>B.weight){return true;}else return false;
}bool cmp2(monkey A,monkey B){if(A.id<B.id){return true;}else return false;
}int main(){int n,m;cin>>n>>m;for(int i=0;i<n;i++){cin>>banana[i]; //banana[i]表示第i个香蕉的质量}for(int i=0;i<m;i++){cin>>monk[i].weight; //monkey[i]表示第i个猴子的体重monk[i].sum=0; //monkey[i]表示第i个猴子获得的香蕉的质量之和monk[i].id=i;}sort(banana,banana+n,greater<int>());//sort(monkey,monkey+n,greater<int>()); //注意greater适用的是int的,所以结构体的比较不适用sort(monk,monk+m,cmp);for(int i=0;i<n;){for(int j=0;j<m;j++){monk[j].sum+=banana[i];i++;}}sort(monk,monk+m,cmp2); //按编号排序,也就是回到初始排序for(int i=0;i<m;i++){cout<<monk[i].sum<<" ";}return 0;
}
通过100%:
应该还得加个判断,if(i>=n){break;}
因为如果不break,可能会超过N,造成数组越界。
要是开了很大的数组,最后都break一下
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+3;
int banana[N];struct monkey{int weight;int sum;int id;
}monk[N];bool cmp(monkey A,monkey B){if(A.weight>B.weight){return true;}else return false;
}bool cmp2(monkey A,monkey B){if(A.id<B.id){return true;}else return false;
}int main(){int n,m;cin>>n>>m;for(int i=0;i<n;i++){cin>>banana[i]; //banana[i]表示第i个香蕉的质量}for(int i=0;i<m;i++){cin>>monk[i].weight; //monkey[i]表示第i个猴子的体重monk[i].sum=0; //monkey[i]表示第i个猴子获得的香蕉的质量之和monk[i].id=i;}sort(banana,banana+n,greater<int>());//sort(monkey,monkey+n,greater<int>()); //注意greater适用的是int的,所以结构体的比较不适用sort(monk,monk+m,cmp);for(int i=0;i<n;){for(int j=0;j<m;j++){monk[j].sum+=banana[i];i++;if(i>=n){break;}}}sort(monk,monk+m,cmp2); //按编号排序,也就是回到初始排序for(int i=0;i<m;i++){cout<<monk[i].sum<<" ";}return 0;
}