当前位置:   article > 正文

蓝桥杯刷题第二十六天_题目描述 商店有 x 个礼物,第 i 个礼物的价格是 a i 元,有一

题目描述 商店有 x 个礼物,第 i 个礼物的价格是 a i 元,有一

第一题:玩具

题目描述

有 n 个玩具,第 i 个玩具的价格是 ai​ 元,超市里搞促销活动,购买 2 个玩具即可免单其中价格较低的一个,价格相等也免单其中一个。牛牛想买下所有玩具,至少需要花多少元?

输入描述:

第一行一个正整数 n(1≤n≤106)。

第二行 n 个正整数,第 i 个表示 ai​(1≤ai​≤109)。

输出描述:

输出一个数表示答案

输入

3 1 2 3

输出

4

说明

第二个和第三个一起买,花 3 元,再花 1 元买下第一个,合计 4 元。

每次选取最大两个数即可,price加上最大的那个价格即可

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. const int N = 1000010;
  5. typedef long long LL;
  6. int a[N];
  7. int n;
  8. int main(){
  9. cin>>n;
  10. for(int i = 1; i <= n; i++) cin>>a[i];
  11. sort(a + 1, a + 1 + n);
  12. int l = n - 1, r = n;
  13. LL price = 0;
  14. while(l >= 1 || r >= 1){
  15. if(l < 1){
  16. price += a[r];
  17. break;
  18. }
  19. int x = a[l], y = a[r];
  20. if(x == y){
  21. price += x;
  22. l-= 2, r -= 2;
  23. continue;
  24. }
  25. else{
  26. price += max(x, y);
  27. l -= 2, r -= 2;
  28. continue;
  29. }
  30. }
  31. cout<<price<<endl;
  32. return 0;
  33. }

 这样写更简单

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. const int N = 1000010;
  5. typedef long long LL;
  6. int a[N];
  7. int n;
  8. int main(){
  9. cin>>n;
  10. for(int i = 1; i <= n; i++) cin>>a[i];
  11. sort(a + 1, a + 1 + n);
  12. int l = n - 1, r = n;
  13. LL price = 0;
  14. for(int i = n; i >= 1; i -= 2){
  15. price += a[i];
  16. }
  17. cout<<price<<endl;
  18. return 0;
  19. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/794784
推荐阅读
相关标签
  

闽ICP备14008679号