Problem Description
又到了收获的季节,树上结了许多韬韬,错了,是许多苹果,有很多个小韬韬都来摘苹果。每个韬韬都想要最大的苹果,所以发生了争执,为了解决他们的矛盾,出题人定了一项特殊的规则,按体重的大小来定顺序,每一轮都是先由胖的先摘(照顾胖子),每个韬韬都是很聪明的,不会错过眼前最大的苹果。现在问题来了,一共有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.输入
输入就不用说了,但是这里面需要把"肥韬韬"走一个结构体,输入的代码如下
1 scanf("%d%d", &n, &m);
2 for(int i = 1; i <= n; i++)
3 scanf("%d", &apple[i]);//苹果
4
5 for(int i = 1; i <= m; i++)
6 {
7 scanf("%d", &t[i].w);//输入韬韬的重量
8 t[i].l = i;//记录编号
9 }
2.排序
题目表述的非常的清楚,我们要将韬韬按肥瘦排序,因为100000不算大,sort过一遍即可.
1 int cmp(node a, node b)//按重量关键字排序
2 {
3 return a.w > b.w;//大到小
4 }
5 {
6 ...//其他代码
7 }
8 sort(t + 1, t + m + 1, cmp);//这是排序的函数
9 sort(apple + 1, apple + 1 + n);//苹果也顺便π下
3.存答案
这一步也十分的牛13,额.
首先将苹果从n到1过一遍,然后韬韬按照之前预处理好的宅苹果.
1 int k = n;//k枚举apple
2 int i = 1;//i枚举韬韬
3 while(k != 0)
4 {
5 t[i].c += apple[k];//记录累加
6 k--;//苹果被宅
7 i++;//抡到下一个韬韬
8 if(i > m)//抡玩一遍
9 i = 1;//再轮一遍
10 }
4.输出
输出就美丽啦,但是他是按编号输出的,现在的复杂度有点堪忧,算啦,管他,再拍一遍.
1 int cmp2(node a, node b)
2 {
3 return a.l < b.l;//按编号排
4 }
5 {
6 ...//其他
7 }
8 sort(t + 1, t + m + 1, cmp2);
9 for(i = 1; i <= m; i++)
10 {
11 printf("%d ", t[i].c);//拍完后输出
12 }
噜噜噜,这题就解决了,贴整体代码:
1 #include <cstdio>
2 #include <algorithm>
3 using namespace std;
4 int n, m;
5 int apple[100001];
6 struct node {
7 int l;
8 int w;
9 int c;
10 }t[100001];
11 int cmp(node a, node b)
12 {
13 return a.w > b.w;
14 }
15 int cmp2(node a, node b)
16 {
17 return a.l < b.l;
18 }
19 int main()
20 {
21 scanf("%d%d", &n, &m);
22 for(int i = 1; i <= n; i++)
23 scanf("%d", &apple[i]);
24
25 for(int i = 1; i <= m; i++)
26 {
27 scanf("%d", &t[i].w);
28 t[i].l = i;
29 }
30 sort(t + 1, t + m + 1, cmp);
31 sort(apple + 1, apple + 1 + n);
32 int k = n;
33 int i = 1;
34 while(k != 0)
35 {
36 t[i].c += apple[k];
37 k--;
38 i++;
39 if(i > m)
40 i = 1;
41 }
42 sort(t + 1, t + m + 1, cmp2);
43 for(i = 1; i <= m; i++)
44 {
45 printf("%d ", t[i].c);
46 }
47 }
奶思~马飞~~...