7-05. 魔法优惠券(25) (数学 ZJU_PAT)
题目链接: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 |
4 1 2 4 -1 |
43 |
| 2 |
4 3 2 6 1 |
49 |
| 3 |
5 0 0 0 0 -1 |
0 |
| 4 |
7 3 36 -1 73 2 3 6 |
1 |
PS:
先排好序后在从两头一起扫描一遍就好了!
代码例如以下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = 1000017;
int a[maxn], b[maxn];
bool cmp(int a, int b)//从大到小
{
return a > b;
}
int main()
{
int n, m;
while(~scanf("%d",&n))
{
int i, j;
for(i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n,cmp);
scanf("%d",&m);
for(i = 0; i < m; i++)
{
scanf("%d",&b[i]);
}
sort(b,b+n,cmp);
int sum = 0;
int l1 = 0, l2 = 0;
int h1 = n-1, h2 = m-1;
for(i = 0; ;i++)
{
if(a[l1]*b[l2] >= 0)//头
{
if(a[l1]*b[l2]==0)
{
if(a[l1]==0)
l1++;
if(b[l2]==0)
l2++;
}
else
{
sum+=a[l1]*b[l2];
l1++;
l2++;
}
}
else if(a[h1]*b[h2] >= 0)//尾
{
if(a[h1]*b[h2] == 0)
{
if(a[h1]==0)
h1--;
if(b[h2]==0)
h2--;
}
else
{
sum+=a[h1]*b[h2];
h1--;
h2--;
}
}
else//都不符合,就不用当前的优惠券
{
l1++;
h1--;
}
if(l1 > h1 || l2 > h2)
break;
}
printf("%d\n",sum);
}
return 0;
}
7-05. 魔法优惠券(25) (数学 ZJU_PAT)的更多相关文章
- PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)
PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...
- 3-07. 求前缀表达式的值(25) (ZJU_PAT数学)
题目链接:http://pat.zju.edu.cn/contests/ds/3-07 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,比如2+3*(7 ...
- 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~ ...
- 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)
主题链接:http://pat.zju.edu.cn/contests/ds/3-08 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操 ...
- 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 ...
- gj3 Python数据模型(魔法函数)
3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __i ...
- 【彩票】彩票预测算法(一):离散型马尔可夫链模型C#实现
前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. 已经3个月没写博客了,因为业余时间一直在研究彩票,发现还是有很多乐趣,偶尔买买,娱 ...
- 【年终分享】彩票数据预测算法(一):离散型马尔可夫链模型实现【附C#代码】
原文:[年终分享]彩票数据预测算法(一):离散型马尔可夫链模型实现[附C#代码] 前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. ...
- java实现哈夫曼编码
java实现哈夫曼编码 哈夫曼树 既然是学习哈夫曼编码,我们首先需要知道什么是哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫 ...
随机推荐
- 2.x ESL第二章习题 2.8
题目 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...
- FZU 1856 The Troop (JAVA高精度)
Problem 1856 The Troop Accept: 72 Submit: 245Time Limit: 1000 mSec Memory Limit : 32768 KB Pro ...
- Can you find it? 分类: 二分查找 2015-06-10 19:55 5人阅读 评论(0) 收藏
Description Give you three sequences of numbers A, B, C, then we give you a number X. Now you need t ...
- 使用Memcache在PHP中调试方法的介绍及应用
使用Memcache在PHP中调试方法的介绍及应用 如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce.首先我们必须要安装,接 ...
- 安装MySQLdb-python时无法找到-lprobes_mysql处理一则
安装MySQLdb时,我已经做好了如下两点:1)配置好mysql_config 有两种方式可以做: ① 做个软连接,把mysql_config链接到/usr/local/bin下 ② ...
- module require区别
LUA modue require package 区别 2011-01-19 12:41:35| 分类: 默认分类 | 标签:lua package module require 加载 ...
- Mock.js:前后端分离开发工具
概述 Mock.js实现的功能 基于 数据模板 生成数据 基于 HTML模板 生成数据 拦截并模拟 Ajax请求 用法 浏览器: <!-- (必选)加载 Mock --> <scri ...
- linux光盘、U盘的挂载与卸载
mount [-t vfstype] [-o options] device dir1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类型.关于一些常用的文件:i ...
- 实现接口IDisposable的示例
想使用using(...), 如: using (Getter process = new Getter()) { //... } 就必须给类实现接口IDisposable public sealed ...
- ASP.NET在实际开发中验证码的用法
在网上有看到很多关于验证码的代码,很多都只是生成一张验证码图片,然而在实际登陆验证模块,验证码要怎么添加进去或者说怎么运用.和实际项目开发中要怎么使用验证码,我自己总结了几点. 一.在实际开发登陆模块 ...