1093: 分香蕉

题目描述

现在有n个香蕉,每个香蕉的质量为ai,m只猴子,每只猴子的体重为bi。
现在将香蕉分给这些猴子,将猴子按照从大到小的顺序依次拿香蕉。当一轮拿完时,还有多的香蕉就会继续一个个拿,直到被拿完。
猴子都是聪明的,每次都会选择一个质量最大的香蕉。
现在请求出每个猴子获得的香蕉质量。

输入格式

第一行输入两个正整数n,m(1<=n,m<=10^5)
第二行n个整数ai表示每个香蕉的质量(1<=ai<=10^4)
第三行m个整数bi表示每个猴子的体重,保证体重互不相同。(1<=bi<=10^9)

输出格式

一行,m个用空格分隔的整数,表示每个猴子获得的香蕉质量之和。按照输入顺序输出对应的猴子。

输入样例 
5 3
1 2 3 4 5
3 2 1
输出样例 
7 5 3

 这里没想到什么很好的方法,就直接用结构体排序了

使用模运对数组赋值

#include 

using namespace std;

typedef long long int ll;
#define endl "\n"
const int  maxLine = 1e5+10;
// #define long long int ll;

// bool cmp(const pair& a,const pair& b){
//     return a.second mypair[maxLine];
struct monky {
    int index;
    int w;
    int value;
};
struct monky ttt[maxLine];
// 体重排序
bool cmp(struct monky a,struct monky b){
    return a.w>b.w;
}

bool cmp2(struct monky a,struct monky b){
    return a.index>m>>n;
    for(int i=0;i>banana[i];
    }
    for(int i=0;i>w;
        ttt[i].index=i;
        ttt[i].w=w;
    }
    // 对香蕉降序
    sort(banana,banana+m,greater());
    // 对猴子体重升序
    sort(ttt,ttt+n,cmp);

    for(int i=0;i

你可能感兴趣的:(算法)