一开始设想,在排序后对coupon从两头逐渐向中间访问,以保证获益最大,后来发现这种想法有bug,原因如下:

若输入

5

-5 -4 -3 -2 -1

5

-5 1 2 3 4

则输出5,而不是25。

错误代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
#define maxn 100000
using namespace std;
vector<int>coupon;
vector<int>product;
int isvisited[maxn] = { 0 };//product
int isused[maxn] = { 0 };//coupon
int sum=0;
void add(int i) {if (isused[i] == 1) return;if (coupon[i] < 0) {for (int j = 0; j < product.size(); j++) {if (product[j] < 0 && isvisited[j] == 0) {isvisited[j] = 1; isused[i] = 1;sum += coupon[i] * product[j];break;}}}else if(coupon[i]>0){for (int j = product.size() - 1; j >= 0; j--) {if (product[j] > 0 && isvisited[j] == 0) {isvisited[j] = 1; isused[i] = 1;sum += coupon[i] * product[j];break;}}}isused[i] = 1;
}
int main() {int Nc, Np;cin>> Nc;for (int i = 0; i < Nc; i++) {int temp; cin >> temp;coupon.push_back(temp);}cin >> Np;for (int i = 0; i < Np; i++) {int temp; cin >> temp;product.push_back(temp);}sort(coupon.begin(), coupon.end());sort(product.begin(), product.end());int i = 0; int j = coupon.size() - 1; while(i<=j){add(j); add(i);i++; j--;}cout << sum;return 0;
}

因此改用按顺序从头到尾对coupon进行一次遍历,还有一个注意要点,正数要从大到小排序,负数要按绝对值从大到小排序,如:5 4 3 -3 -2 -1。如果仅按最大到小排序,无法求得最大收益。

正确代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
#define maxn 100000
using namespace std;
vector<int>coupon;
vector<int>product;
bool compare(int a, int b) {if (a * b > 0)return abs(a) > abs(b);else return a > b;
}
int main() {int Nc, Np;cin>> Nc;for (int i = 0; i < Nc; i++) {int temp; cin >> temp;coupon.push_back(temp);}cin >> Np;for (int i = 0; i < Np; i++) {int temp; cin >> temp;product.push_back(temp);}sort(coupon.begin(), coupon.end(),compare);sort(product.begin(), product.end(),compare);int i = 0; int j = 0; int sum = 0;while (i < Nc && j < Np) {if (coupon[i] * product[j] > 0) {sum += coupon[i] * product[j];i++; j++;}else {if (coupon[i] == 0) i++;else if (product[j] == 0) j++;else if (coupon[i] < 0) j++;else i++;}}cout << sum;return 0;
}

PAT甲级 1037(C++)相关推荐

  1. PAT甲级1037 Magic Coupon:[C++题解]贪心

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 贪心. 两个数列分别从大到小排列.从前往后遍历,如果a数组和b数组前k个数都是正数,就相乘累加到res中: 从后往前遍历,如果a数组 ...

  2. PAT甲级题目对应知识点分类梳理

    PAT甲级的106道题的知识点与对应的题号整理如下,便于做专项练习和巩固! 1.数据结构 可以用STL系列 栈:1051 堆:1098 队列:1014.1056 链表:1032.1052.1074.1 ...

  3. PAT甲级考试题库题目分类

    PAT甲级题目分类 水题 1136.1139.1143.1148 字符串处理 1001.1005.1035.1061.1073.1077.1082. 1108.1140.1152 模拟 1002.10 ...

  4. PAT甲级真题目录(按题型整理)(转自柳神)

    转载自:https://www.liuchuo.net/archives/2502?tdsourcetag=s_pcqq_aiomsg 最短路径 1003. Emergency (25)-PAT甲级真 ...

  5. PAT甲级训练合集(1-70)

    本章题解跳转 考点 P1001 数字的数组表示和处理 P1002 多项式的数组表示和处理 P1003 深度优先搜素 P1004 深度优先搜素 P1005 哈希表 P1006 P1007 数组子区间求和 ...

  6. PAT 甲级-算法初步

    阅读原文 接上一篇 PAT 甲级-入门模拟 ,自我感觉这部分才是真正的算法入门,对基础的数据结构提供了很好的类型题进行匹配练习 包括分类:排序.散列.贪心.二分.双指针.打表.递推 排序 思想解释 排 ...

  7. PAT甲级题目解析和知识点分类整理

    转载请注明出处 个人博客:https://maxusun.github.io/ 今天整理电脑,发现了去年为了考研浙大计算机整理的PAT资料.现在考研已经尘埃落定.想到当时盲目刷题浪费了好多时间,在这里 ...

  8. PAT甲级(Advanced Level)真题--1046 Sharing

    PAT甲级(Advanced Level)真题–1046 Sharing 通过:648 提交:1138 通过率:56% To store English words, one method is to ...

  9. PAT甲级(Advanced Level)真题-- 1062 To Buy or Not to Buy

    PAT甲级(Advanced Level)真题-- 1062 To Buy or Not to Buy 通过:643 提交:1220 通过率:52% Eva would like to make a ...

最新文章

  1. 最前线|爱奇艺低调上线“好多视频”,短视频战场的主动防御
  2. Strategy Pattern(策略模式)
  3. java基础(二) 自增自减与贪心规则
  4. 赋值后页面不渲染_第七节:框架搭建之页面静态化的剖析
  5. Quick BI助力云上大数据分析---深圳云栖大会
  6. 弹出键盘windowsoftinputmode属性设置值
  7. 管理表空间和数据文件——维护表空间——设置默认表空间和删除表空间和删除数据文件盒临时文件...
  8. SAP Cloud Platform 上CPI的初始化工作
  9. 安全终止MFC线程全
  10. leetcode 834. 树中距离之和(dp)
  11. 用Python将文件夹打包成Zip并备份至U盘
  12. ORACLE查询保留字
  13. 数据结构与算法学习笔记之 提高读取性能的链表(上)
  14. metaspolit教程
  15. B/S架构 Web打印程序(Argox)
  16. 什么样的公司值得加入?
  17. 网上体育用品商城(ssm,mysql,bootstrap,html,css)
  18. Buddy Test测试中琐事温故
  19. add-migration 多个DbContext
  20. SIM7020X NB-IOT HAT 通过MQTT连接EMQ物联网平台

热门文章

  1. Mac终端查看CPU资源信息
  2. 10步成为一个优秀的Java开发!
  3. 软件测试与质量保证课后作业
  4. ROS导航小车经验总结
  5. VERSA VSP-3501-16B电磁阀
  6. 【立创开发板】梁山派初体验
  7. 报错 | vue-router.esm.js?3423:2065 Uncaught (in promise) NavigationDuplicated: Avoided redundant navig
  8. HIWIN、IKO滑块HGH15CA、LWHD15B型号替换
  9. 手机谷歌 访问_更新谷歌正式发布安卓10正式版和windows版
  10. 图的常见存储结构及各自的优缺点