题目链接:http://www.patest.cn/contests/ds/7-05

在火星上有个魔法商店,提供魔法优惠券。每一个优惠劵上印有一个整数面值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。

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

输入格式说明:

输入有2行。第1行首先给出优惠劵的个数N。随后给出N个优惠劵的整数面值。第2行首先给出商品的个数M,随后给出M个商品的整数价值。

N和M在[1, 106]之间。全部的数据大小不超过230。数字间以空格分隔。

输出格式说明:

输出能够得到的最大回报。

例子输入与输出:

序号 输入 输出
1
  1. 4 1 2 4 -1
  2. 4 7 6 -2 -3
  1. 43
2
  1. 4 3 2 6 1
  2. 3 2 6 3
  1. 49
3
  1. 5 0 0 0 0 -1
  2. 4 0 0 0 1
  1. 0
4
  1. 7 3 36 -1 73 2 3 6
  2. 6 -1 -1 -1 -1 -1 -1
  1. 1

PS:

先排好序后在从两头一起扫描一遍就好了!

代码例如以下:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <iostream>
  5. using namespace std;
  6. const int maxn = 1000017;
  7. int a[maxn], b[maxn];
  8. bool cmp(int a, int b)//从大到小
  9. {
  10. return a > b;
  11. }
  12. int main()
  13. {
  14. int n, m;
  15. while(~scanf("%d",&n))
  16. {
  17. int i, j;
  18. for(i = 0; i < n; i++)
  19. {
  20. scanf("%d",&a[i]);
  21. }
  22. sort(a,a+n,cmp);
  23. scanf("%d",&m);
  24. for(i = 0; i < m; i++)
  25. {
  26. scanf("%d",&b[i]);
  27. }
  28. sort(b,b+n,cmp);
  29. int sum = 0;
  30. int l1 = 0, l2 = 0;
  31. int h1 = n-1, h2 = m-1;
  32. for(i = 0; ;i++)
  33. {
  34. if(a[l1]*b[l2] >= 0)//头
  35. {
  36. if(a[l1]*b[l2]==0)
  37. {
  38. if(a[l1]==0)
  39. l1++;
  40. if(b[l2]==0)
  41. l2++;
  42. }
  43. else
  44. {
  45. sum+=a[l1]*b[l2];
  46. l1++;
  47. l2++;
  48. }
  49. }
  50. else if(a[h1]*b[h2] >= 0)//尾
  51. {
  52. if(a[h1]*b[h2] == 0)
  53. {
  54. if(a[h1]==0)
  55. h1--;
  56. if(b[h2]==0)
  57. h2--;
  58. }
  59. else
  60. {
  61. sum+=a[h1]*b[h2];
  62. h1--;
  63. h2--;
  64. }
  65. }
  66. else//都不符合,就不用当前的优惠券
  67. {
  68. l1++;
  69. h1--;
  70. }
  71. if(l1 > h1 || l2 > h2)
  72. break;
  73. }
  74. printf("%d\n",sum);
  75. }
  76. return 0;
  77. }

7-05. 魔法优惠券(25) (数学 ZJU_PAT)的更多相关文章

  1. PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)

    PTA数据结构与算法题目集(中文)  7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分)   在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...

  2. 3-07. 求前缀表达式的值(25) (ZJU_PAT数学)

    题目链接:http://pat.zju.edu.cn/contests/ds/3-07 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,比如2+3*(7 ...

  3. 2-08. 用扑克牌计算24点(25) (ZJU_PAT 数学 枚举)

    题目链接:http://pat.zju.edu.cn/contests/ds/2-08 一副扑克牌的每张牌表示一个数(J.Q.K分别表示11.12.13,两个司令都表示6).任取4张牌.即得到4个1~ ...

  4. 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)

    主题链接:http://pat.zju.edu.cn/contests/ds/3-08 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操 ...

  5. PAT Advanced 1024 Palindromic Number (25) [数学问题-⼤整数相加]

    题目 A number that will be the same when it is written forwards or backwards is known as a Palindromic ...

  6. gj3 Python数据模型(魔法函数)

    3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __i ...

  7. 【彩票】彩票预测算法(一):离散型马尔可夫链模型C#实现

    前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. 已经3个月没写博客了,因为业余时间一直在研究彩票,发现还是有很多乐趣,偶尔买买,娱 ...

  8. 【年终分享】彩票数据预测算法(一):离散型马尔可夫链模型实现【附C#代码】

    原文:[年终分享]彩票数据预测算法(一):离散型马尔可夫链模型实现[附C#代码] 前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. ...

  9. java实现哈夫曼编码

    java实现哈夫曼编码 哈夫曼树   既然是学习哈夫曼编码,我们首先需要知道什么是哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫 ...

随机推荐

  1. MongoDB 复制

    副本集:简单说,副本集就是有自动故障恢复功能的主从集群.主从集群和副本集最为明显的区别:副本集没有固定的“主节点”.整个集群会选出一个主节点.当其不能工作时,变更到其他节点.二者看起来非常相似:副本集 ...

  2. HTML5 canvas translate() 方法

    HTML5 canvas translate() 方法 translate() 方法重新映射画布上的 (0,0) 位置.

  3. AudioManager详解(结合源代码)

    AudioManager:用来对音量大小,声音模式(静音,震动,震动加声音等模式)的管理, 还有用它来注册“插入耳机”时的广播接收者(Action: android.intent.action.MED ...

  4. SSH2配置事务的两种方式

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. 查看Linux操作系统版本

      1.查看内核版本命令: [root@server1 Desktop]# cat /proc/version Linux version 2.6.32-358.el6.x86_64 (mockbui ...

  6. Java - 反射机制 2

    package spring.classloader; import java.lang.reflect.Constructor; import java.lang.reflect.Field; im ...

  7. asp.net后台的一些操作

    1.在后台绑定下拉框再返回到前台 protected StringBuilder sq = new StringBuilder();//为了在前台绑定 protected void Page_Load ...

  8. dojo.io.script

    dojo.io.script 定义: 跨域访问数据,可以动态的将script标签插入到网页当中. 局限: 1.只支持get方式访问: 2.只支持异步调用. 使用: 1.dojo.io.script.g ...

  9. 详解AJAX核心 —— XMLHttpRequest 对象 (下)

    继续上一篇的内容上一篇关于XMLHttpRequest 对象发送对服务器的请求只说到了用Get方式,没有说Post方式的.那是因为要说Post方式就需要先说另外一个东西,那就是DOM(Document ...

  10. mysql 互为主从复制常见问题

    报错:1)change master导致的:              Last_IO_Error: error connecting to master - retry-time: 60  retr ...