题目链接:
传送门

题目描述:
在火星上有个魔法商店,提供魔法优惠券。每个优惠劵上印有一个整数面值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. SAP QM 源检验(Source Inspection)功能展示
  2. 狂汗!售货员竟遭遇到最彪悍的付款方式(转)
  3. WPF 3D基础学习 - 画布、相机、Model3D(1)
  4. java内存块_JVM上的并发和Java内存模型之同步块笔记
  5. 29.类加载机制、类加载过程、加载、验证、准备、解析、初始化、总结
  6. 《算法竞赛入门经典》习题4-2 正方形 (Squares,ACM,ICPC World Finals 1990,UVa201)——仅提供大体方法
  7. 数据库原理 知识点总结
  8. c++ --- 字符串中的标点符号
  9. 2016年计算机网考,2016年电大:计算机网考(全)练习题.doc
  10. 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程
  11. h5页面移动端的社会化分享_Adobe年尾续运H5页面
  12. python datetime和字符串如何相互转化?
  13. 故事感悟:管道与挑水
  14. 修改登录密码html代码,html登录界面设置账号密码
  15. 计算机辅助翻译实践语料库,《计算机辅助翻译实践》
  16. 双偶幻方的c语言算法,任意阶幻方的c++实现----奇阶幻方、双偶幻方、单偶幻方。...
  17. 网络共享计算机怎么连接,网络共享,详细教您电脑怎么设置共享无线网络
  18. iOS开发 - 使用IJKPlayer时,关于需求要边下边播的缓存功能,退回来后播放缓存不再耗流量
  19. 计挑赛初赛试题(2020)(一)
  20. Python 程序示例 - 初学者的简单代码示例

热门文章

  1. 清华应届硕士炮轰字节:恶意低薪2万/月,硕士不如本科还倒贴
  2. 高精度的“文件转换excel”背后藏着这些解题思路!
  3. swoole的官网怎么学习。彻底理清swoole架构
  4. 仿京东APP分类页面(mvp模式+OkHttp封装工具类+拦截器+弱引用回收)
  5. css动画 animation
  6. 严重性代码说明项目文件行错误C4996'strcpy',strcpy头文件
  7. 简短 精辟 哲理 励志短句汇总
  8. 关于百度编辑器设置默认行间距段间距
  9. Python学习之Python软件安装教程
  10. C语言循环语句for