题目链接:
传送门

题目描述:
在火星上有个魔法商店,提供魔法优惠券。每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免费赠品的时候使用面值为正的优惠劵,则必须倒贴给商店K倍该商品价值的金额…… 但是不要紧,还有面值为负的优惠劵可以用!(真是神奇的火星)

例如,给定一组优惠劵,面值分别为1、2、4、-1;对应一组商品,价值为火星币M$7、6、-2、-3,其中负的价值表示该商品是免费赠品。我们可以将优惠劵3用在商品1上,得到M$28的回报;优惠劵2用在商品2上,得到M$12的回报;优惠劵4用在商品4上,得到M$3的回报。但是如果一不小心把优惠劵3用在商品4上,你必须倒贴给商店M$12。同样,当你一不小心把优惠劵4用在商品1上,你必须倒贴给商店M$7。

规定每张优惠券和每件商品都只能最多被使用一次,求你可以得到的最大回报。

输入格式:
输入有两行。第一行首先给出优惠劵的个数N,随后给出N个优惠劵的整数面值。第二行首先给出商品的个数M,随后给出M个商品的整数价值。N和M在[1, 10​6 ]之间,所有的数据大小不超过2​30,数字间以空格分隔。

输出格式:
输出可以得到的最大回报。

输入样例:
4 1 2 4 -1
4 7 6 -2 -3

输出样例:
43

题目思路:
本题可以用贪心算法解决,每次使用绝对值最大且同号的优惠券和商品,若无同号则不使用。

参考代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int n,m;
int a[1000001];
int b[1000001];int cmp(const void *a,const void *b)
{int* pa=(int*)a;int* pb=(int*)b;int num1=*pa;int num2=*pb;return num2-num1;
}int main()
{int i,max=0;memset(a,0,sizeof(a));memset(b,0,sizeof(b));scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);scanf("%d",&m);for(i=0;i<m;i++)scanf("%d",&b[i]);qsort(a,n,sizeof(a[0]),cmp);qsort(b,m,sizeof(b[0]),cmp);int head=0,tail1=n-1,tail2=m-1;//head从最大值起,tail从最小值起(可能为负)while(a[head]>0&&b[head]>0&&head<n&&head<m){//如果最大值同为正数则从最大值(也即绝对值最大)开始累加。max+=a[head]*b[head];head++;}while(a[tail1]<0&&b[tail2]<0&&tail1>head&&tail2>head){//最大值为负数则从末尾开始累加,或从头累加至不同号再继续累加同为负数的情况。max+=a[tail1]*b[tail2];tail1--;tail2--;}printf("%d",max);return 0;
}

参考资料传送门:
传送门

7-39 魔法优惠券相关推荐

  1. 7-39 魔法优惠券 (25 分)(思路加解释 用容器做的)加油兄弟们

    一:题目 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免 ...

  2. R7-8 魔法优惠券 (25 分)

    R7-8 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值 ...

  3. 用JAVA实现魔法优惠券

    7-9 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的 ...

  4. 数据结构PTA 基础实验7-2.1 魔法优惠券

    基础实验7-2.1 魔法优惠券 题目 解法 题目 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费 ...

  5. 基础实验 7-2.1 魔法优惠券(25 分)

    在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值 K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免费赠品的 ...

  6. 基础实验7-2.1 魔法优惠券 (贪心)

    在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免费赠品的时 ...

  7. PTA 7-39 魔法优惠券 (25 分)

    7-39 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值 ...

  8. 数据结构与算法题目集7-39 魔法优惠券(c语言实现)

    原题链接 这道题最主要的问题其实是排序,再接下来要搞清楚如何求得最大收益. 最大收益=最大正的优惠卷x最大正的商品+最大负的优惠卷x最大负的商品 这里强烈推荐大家使用qsort函数! #include ...

  9. PTA 数据结构与算法题目集(中文)

    一:数据结构与算法题目(中文版) 7-2 一元多项式的乘法与加法运算 (20 分) 7-3 树的同构 (25 分) 7-4 是否同一棵二叉搜索树 (25 分) 7-6 列出连通集 (25 分)(详解) ...

最新文章

  1. 如何利用CycleGAN实现男女性别转换
  2. 渲染树构建、布局及绘制
  3. 对SPA(单页面应用)的总结
  4. python导出数据找不到csv_【记录】使用Python读取/导出(写入)CSV文件
  5. Java高并发入门-线程初步(二)
  6. Log42j 源代码分析:plugin(插件)机制
  7. python中easygui有几种_Python 模块EasyGui详细介绍
  8. java json 多余属性,fastjson支持JSON字符串解析到指定类型的JavaBean时的多余属性么?...
  9. 脚本放在 body 元素的底部
  10. Xcode 快速开发 代码块
  11. Java开发笔记(一百三十三)Swing的菜单
  12. 关于将网易有道词典单词本导出到必应词典生词本的尝试
  13. 页面开机自启动,页面置顶显示,页面持续获得焦点,鼠标点击器源码
  14. 微信小程序开发中医药配方小程序药方后台管理系统|前后分离VUE.js
  15. xrd精修教程_XRD精修教程.pdf
  16. python修改pdf内容_如何编辑pdf文件,替换其数据?
  17. 用JavaScript写一个简单的网页倒计时插件
  18. oracle-DDL对表的操作
  19. 浙江大学-翁凯 C语言进阶,编程题
  20. R语言与RStudio的下载与安装方法

热门文章

  1. python3-turtle(1)
  2. Android Studio 控制台中文乱码
  3. Inter(R) Ethernet Connection (10) l219-V网卡驱动下载以及安装
  4. 家园卫士服务器维护2021,家园卫士2021
  5. 智能车循迹避障磁铁检测比赛
  6. 一致性 Hash 是什么?在负载均衡中的应用
  7. 滞回比较电路简便计算小工具
  8. Springboot3.0 打包后,tomcat启动失败
  9. Excel日期时间函数查询(超实用的16种经典用法)
  10. 关于元素的显示与隐藏