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

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

在火星上有个魔法商店,提供魔法优惠券。每个优惠劵上印有一个整数面值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, 1]之间,所有的数据大小不超过2​30​​,数字间以空格分隔。

输出格式:

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

输入样例:

4 1 2 4 -1
4 7 6 -2 -3

输出样例:

43
题目分析:用优先队列来每次找出最好的情况,看了大佬的做法,其实只需要排序就好了,每次找出符号相同的最好情况 但这题我最后一个测试题无法通过
 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define INIFITY -65535
typedef struct HeapStruct* H;
struct HeapStruct
{
int Heap[];
int Size;
}MaxHeap1,MaxHeap2; int Delete(H MaxHeap)
{
int Max = MaxHeap->Heap[];
int Tmp = MaxHeap->Heap[MaxHeap->Size--];
int Parent, Child;
for (Parent = ; Parent * <= MaxHeap->Size; Parent = Child)
{
Child = Parent * ;
if (Child != MaxHeap->Size && MaxHeap->Heap[Child] < MaxHeap->Heap[Child + ])
Child++;
if (Tmp >= MaxHeap->Heap[Child])break;
else
MaxHeap->Heap[Parent] = MaxHeap->Heap[Child];
}
MaxHeap->Heap[Parent] = Tmp;
return Max;
}
int DeleteM(H MinHeap)
{
int Min = MinHeap->Heap[];
int Tmp = MinHeap->Heap[MinHeap->Size--];
int Parent, Child;
for (Parent = ; Parent * <= MinHeap->Size; Parent = Child)
{
Child = Parent * ;
if (Child != MinHeap->Size && MinHeap->Heap[Child]>MinHeap->Heap[Child + ])
Child++;
if (Tmp <= MinHeap->Heap[Child])break;
else
MinHeap->Heap[Parent] = MinHeap->Heap[Child];
}
MinHeap->Heap[Parent] = Tmp;
return Min;
} void PrecDown(H MaxHeap, int i)
{
int Parent, Child;
int Tmp = MaxHeap->Heap[i];
for (Parent = i; Parent * <= MaxHeap->Size; Parent = Child)
{
Child = Parent * ;
if (Child != MaxHeap->Size && MaxHeap->Heap[Child] < MaxHeap->Heap[Child + ])
Child++;
if (Tmp >= MaxHeap->Heap[Child])break;
else
MaxHeap->Heap[Parent] = MaxHeap->Heap[Child];
}
MaxHeap->Heap[Parent] = Tmp;
}
void BuildHeap(H MaxHeap)
{
for (int i = MaxHeap->Size / ; i; i /= )
PrecDown(MaxHeap, i);
}
void PrecDownM(H MinHeap, int i)
{
int Parent, Child;
int Tmp = MinHeap->Heap[i];
for (Parent = i; Parent * <= MinHeap->Size; Parent = Child)
{
Child = Parent * ;
if (Child != MinHeap->Size && MinHeap->Heap[Child] > MinHeap->Heap[Child + ])
Child++;
if (Tmp <= MinHeap->Heap[Child])break;
else
MinHeap->Heap[Parent] = MinHeap->Heap[Child];
}
MinHeap->Heap[Parent] = Tmp;
}
void BuildHeapM(H MinHeap)
{
for (int i = MinHeap->Size / ; i; i /= )
PrecDownM(MinHeap, i);
}
int main()
{
MaxHeap1.Heap[] = MaxHeap2.Heap[] = INIFITY;
int N, M;
int num,sum;
scanf("%d", &N);
MaxHeap1.Size = N;
for (int i = ; i <=MaxHeap1.Size; i++)
{
scanf("%d", &num);
MaxHeap1.Heap[i] = num;
}
scanf("%d", &M);
MaxHeap2.Size = M;
for (int i = ; i <=MaxHeap2.Size; i++)
{
scanf("%d", &num);
MaxHeap2.Heap[i] = num;
}
BuildHeap(&MaxHeap1);
BuildHeap(&MaxHeap2);
sum = ;
int num1, num2;
int t = N > M ? M : N;
while (MaxHeap1.Size!=&&MaxHeap2.Size!=)
{
if (MaxHeap1.Heap[] > && MaxHeap2.Heap[] > )
{
num1 = Delete(&MaxHeap1);
num2 = Delete(&MaxHeap2);
sum += num1 * num2;
}
else
break;
}
BuildHeapM(&MaxHeap1);
BuildHeapM(&MaxHeap2);
while (MaxHeap1.Size!=&&MaxHeap2.Size!=)
{
if (MaxHeap1.Heap[] < && MaxHeap2.Heap[] < )
{
num1 = DeleteM(&MaxHeap1);
num2 = DeleteM(&MaxHeap2);
sum += num1 * num2;
}
else
break;
}
printf("%d", sum);
}

PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)的更多相关文章

  1. PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)

    PTA数据结构与算法题目集(中文)  7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分)   Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...

  2. PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

    PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...

  3. PTA数据结构与算法题目集(中文) 7-29

    PTA数据结构与算法题目集(中文)  7-29 7-29 修理牧场 (25 分)   农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条 ...

  4. PTA数据结构与算法题目集(中文) 7-28

    PTA数据结构与算法题目集(中文)  7-28 7-28 搜索树判断 (25 分)   对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值.如果我 ...

  5. PTA数据结构与算法题目集(中文) 7-25

    PTA数据结构与算法题目集(中文)  7-25 7-25 朋友圈 (25 分)   某学校有N个学生,形成M个俱乐部.每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈.一个学生可以同时属于若干 ...

  6. PTA数据结构与算法题目集(中文) 7-24

    PTA数据结构与算法题目集(中文)  7-24 7-24 树种统计 (25 分)   随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类.请编写程序帮助研究人员统计每种树的数量,计算每种树 ...

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

    PTA数据结构与算法题目集(中文)  7-23 7-23 还原二叉树 (25 分)   给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度. 输入格式: 输入首先给出正整数N(≤50) ...

  8. PTA数据结构与算法题目集(中文) 7-20

    PTA数据结构与算法题目集(中文)  7-20 7-20 表达式转换 (25 分)   算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个 ...

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

    PTA数据结构与算法题目集(中文)  7-9 7-9 旅游规划 (25 分)   有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游 ...

  10. PTA数据结构与算法题目集(中文) 7-6

    PTA数据结构与算法题目集(中文)  7-6 7-6 列出连通集 (25 分)   给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时, ...

随机推荐

  1. django 博客搭建

    comment1.安装django pip install django 2.创建项目 django-admin startproject mysite 3.在mysite文件夹下创建app pyth ...

  2. Lake Counting(POJ No.2386)

    题目描述:有一个大小为N*M的园子,八连通的积水被认为是连接在一起的.请求出园子里总共有多少水洼?(八连通指的是下图中相对w的*部分) *** *w* *** 限制条件 N,M<=100 样例 ...

  3. Simulink仿真入门到精通(五) Simulink模型的仿真

    5.1 模型的配置仿真 由各种模块所构建的可视化逻辑连接,只是模型的外在表现,模型仿真的核心驱动器是被称作解算器(Solver)的组件,相当于Simulink仿真过程的心脏,驱动着模型仿真,它在每一个 ...

  4. ReentrantLock源码探究

    ReentrantLock是一种可重入锁,可重入是说同一个线程可以多次获取同一个锁,内部会有相应的字段记录重入次数,它同时也是一把互斥锁,意味着同时只有一个线程能获取到可重入锁. 1.构造函数 pub ...

  5. C++总结之template

    函数模板 我们可以把函数模板当做一种特殊的函数,里面的参数类型可以是任意类型,这样的话我们就可以减少重复定义,从而让这个函数模板自动适应不同的参数类型,也就是说函数可以适应多种类型的参数,例如doub ...

  6. props watch 接口抖动

    readType (val) { this.innerReadType = '-' this.$nextTick(() => { this.innerReadType = val }) },

  7. Natas2 Writeup(水平越权)

    Natas2: 查看源码,发现页面隐藏了一个图片的连接,分析图片,无隐写内容,联想到目录权限问题,访问同级目录http://natas2.natas.labs.overthewire.org/file ...

  8. window 查看端口 杀端口

    最近写项目,总是出现端口被占用的问题,原来傻傻的把电脑重启一下,终于有一天受不了了,想要想办法解决.刚开始从网上找了好多教程,发现不行.开始自己尝试,终于,成功的将占用端口的进程杀掉.在此记录下过程( ...

  9. CodeMixerPro工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...

  10. 原创 记录一次线上Mysql慢查询问题排查过程

    背景 前段时间收到运维反馈,线上Mysql数据库凌晨时候出现慢查询的报警,并把原始sql发了过来: --去除了业务含义的sql update test_user set a=1 where id=1; ...