又要了丰收的季节,花果山的nn个香蕉成熟了,每个香蕉的质量为aiai。蒜头君还养着mm只猴子,每只猴子的体重为bibi。猴子们吃香蕉有一定的顺序,按照体重从大到小的顺序一个个拿香蕉。当一轮拿完时,如果还有多的香蕉就会继续一个个拿,直到香蕉被取完。每个猴子都很聪明,每次会选质量最大的那个香蕉。
现在问题来了,最后每个猴子能获得多少质量的香蕉?
【输入】第一行两个整数nn, mm (1≤n,m≤1051≤n,m≤105)。
第二行nn个整数aiai ($1
第三行mm个整数bibi ($1
【输出】一行,mm个用空格分隔的整数,表示每个猴子获得的香蕉质量之和。
【输入样例】5 3 1 2 3 4 5 3 2 1 【输出样例】
7 5 3
源代码:
#include <bits/stdc++.h> using namespace std; int n,m,a[100010],b[100010],id[100010]; long long ans[100010]; int main( ) {cin>>n>>m;for(int i=0;i<n;i++){scanf("%d",&a[i]);}for(int i=0;i<m;i++){scanf("%d",&b[i]);id[i]=i;}sort(a,a+n,greater<int>());sort(id,id+m,[&](int i,int j){return b[i]>b[j];} );for(int i=0,j=0;i<n;i++){int k=id[j];ans[k]+=a[i];j=j+1==m?0:j+1;}for(int i=0;i<m;i++){printf("%lld ",ans[i]);}return 0; }