假设第 i(从1开始)个同学掌握的知识点为ti,老师会单独辅导掌握知识点最少的学生(若知识点相同则选编号最小的同学),学生掌握的知识点会增加tadd。经过若干次辅导后要求输出掌握知识点最少的学生的编号。
输入格式:第一行包括 2 个正整数n,k;接下来一行有n个整数,每个整数表示开始时每个学生的知识点;接下来k行,每行包含1个数,每个操作表示对当前掌握知识点最少的学生进行辅导,学生掌握的知识点增加tadd。
输出格式:输出一个数,表示经过若干次辅导后掌握知识点最少的学生的编号。
#include<bits/stdc++.h>
using namespace std;
int main(){//最小堆,堆顶top为最小值
int n,k;cin>>n>>k;priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
for(int i=0;i<n;i++){//知识点,编号
int ti;cin>>ti;q.push({ti,i+1});
}
for(int i=0;i<k;i++){
int add;cin>>add;//知识点
auto t=q.top();q.pop();//取出堆顶学生
t.first+=add;q.push(t);//辅导后放入
}cout<<q.top().second;return 0;
}
输入示例:5 2 \n 2 3 1 4 5
输出示例:3 4

被折叠的 条评论
为什么被折叠?



