上海的网站名教育培训机构前十名
文章目录
- 题目解读
- 思路
- AC CODE
- 参考
题目解读
巴拉巴拉一大堆,实际上题目都告诉我们用什么算法能得到最优解了
但是模拟的过程还是十分的艰辛
思路
大模拟,注释给出
AC CODE
#include<bits/stdc++.h>using namespace std;const int N =5010;int totalSum; struct range{string name;int id;int num;//教室数量int stuNum;//学生数量
}r[N]; vector<int> class_;//额外开辟的考场 bool cmp1(range r1,range r2){return r1.stuNum>r2.stuNum;
}bool cmp2(range r1,range r2){return r1.id < r2.id;
}int main(){int n,c;cin >> n >> c;for(int i=0; i<n; i++){string name;int num;cin >> name >> num;//教室数量 int t=num/c;//纯赛场数量 totalSum+=t;//剩几个学生 num%=c;//有剩余的话后续还要额外给他加学生 if(num!=0)t++;r[i]={name,i,t,num}; } //按照剩余学生数量进行排序 sort(r,r+n,cmp1);for(int i=0; i<n; i++){bool flag=false;//当前学校学生安排完毕就continue if(r[i].stuNum==0)continue;else{for(int j=0; j<class_.size(); j++){//当前学生能被安排到这个赛场 if(class_[j]+r[i].stuNum<=c){flag=true;break;}}//不能的话新开辟,初始值就是当前学校的学生人数 if(!flag){class_.push_back(r[i].stuNum); } }}sort(r,r+n,cmp2);for(int i=0; i<n; i++)cout<<r[i].name<<" "<<r[i].num<<endl;cout<<totalSum+class_.size();return 0;
}
参考
B站up主,一天五顿饭
🌻编写本篇文章目的是笔者想以输出的形式进行学习,顺便记录学习点滴🌻
🌹 如果本篇文章对你有帮助的话那就点个赞吧👍🌹
😇 本篇文章可能存在多处不足,如有修改意见,可以私信或者评论我哦 😇