韬韬抢苹果 #普及组#

作者: 腐啊 | 来源:发表于2019-09-21 21:43 被阅读0次

又到了收获的季节,树上结了许多韬韬,错了,是许多苹果,有很多个小韬韬都来摘苹果。每个韬韬都想要最大的苹果,所以发生了争执,为了解决他们的矛盾,出题人定了一项特殊的规则,按体重的大小来定顺序,每一轮都是先由胖的先摘(照顾胖子),每个韬韬都是很聪明的,不会错过眼前最大的苹果。现在问题来了,一共有n个苹果,m个韬韬,要你按原顺序输出每个韬韬可以抢到的苹果的总大小。

Input

第一行两个数n,m。

接下来一行n个数,分别为每个苹果的大小。

接下来一行m个数,分别为每个韬韬的体重。

Output

一行m个数,每个韬韬抢到的苹果的大小。

Sample Input

5 3

1 2 3 4 5

1 2 3

Sample Output

3 5 7

[数据规模]

n,m<=100000

思路

这一题,乍一看题目,"啊好水啊".可是嘞......

虽然看起来很水,但不过我写的代码比"韬韬摘苹果"的多了去了.先说咋做吧.

1.输入

输入就不用说了,但是这里面需要把"肥韬韬"走一个结构体,输入的代码如下

scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
    scanf("%d", &apple[i]);//苹果
​
for(int i = 1; i <= m; i++)
{
    scanf("%d", &t[i].w);//输入韬韬的重量
    t[i].l = i;//记录编号
}

2.排序

题目表述的非常的清楚,我们要将韬韬按肥瘦排序,因为100000不算大,sort过一遍即可.

int cmp(node a, node b)//按重量关键字排序
{
    return a.w > b.w;//大到小
}
{
...//其他代码
}
sort(t + 1, t + m + 1, cmp);//这是排序的函数
sort(apple + 1, apple + 1 + n);//苹果也顺便π下

3.存答案

这一步也十分的牛13,额.

首先将苹果从n到1过一遍,然后韬韬按照之前预处理好的宅苹果.

int k = n;//k枚举apple
int i = 1;//i枚举韬韬
while(k != 0)
{
    t[i].c += apple[k];//记录累加
    k--;//苹果被宅
    i++;//抡到下一个韬韬
    if(i > m)//抡玩一遍
        i = 1;//再轮一遍
}

4.输出

输出就美丽啦,但是他是按编号输出的,现在的复杂度有点堪忧,算啦,管他,再拍一遍.

int cmp2(node a, node b)
{
    return a.l < b.l;//按编号排
}
{
    ...//其他
}
sort(t + 1, t + m + 1, cmp2);
for(i = 1; i <= m; i++)
{
    printf("%d ", t[i].c);//拍完后输出
}

噜噜噜,这题就解决了,贴整体代码:

#include <cstdio>
#include <algorithm>
using namespace std;
int n, m;
int apple[100001];
struct node {
    int l;
    int w;
    int c;
}t[100001];
int cmp(node a, node b)
{
    return a.w > b.w;
}
int cmp2(node a, node b)
{
    return a.l < b.l;
}
int main()
{
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i++)
        scanf("%d", &apple[i]); 
    
    for(int i = 1; i <= m; i++)
    {
        scanf("%d", &t[i].w);
        t[i].l = i;
    }
    sort(t + 1, t + m + 1, cmp);
    sort(apple + 1, apple + 1 + n);
    int k = n;
    int i = 1;
    while(k != 0)
    {
        t[i].c += apple[k];
        k--;
        i++;
        if(i > m)
            i = 1;
    }
    sort(t + 1, t + m + 1, cmp2);
    for(i = 1; i <= m; i++)
    {
        printf("%d ", t[i].c);
    }
}

相关文章

网友评论

    本文标题:韬韬抢苹果 #普及组#

    本文链接:https://www.haomeiwen.com/subject/sjoeuctx.html