PTA(Advanced Level)1037.Magic Coupon
The magic shop in Mars is offering some magic coupons. Each coupon has an integer N printed on it, meaning that when you use this coupon with a product, you may get N times the value of that product back! What is more, the shop also offers some bonus product for free. However, if you apply a coupon with a positive N to this bonus product, you will have to pay the shop N times the value of the bonus product... but hey, magically, they have some coupons with negative N's!
For example, given a set of coupons { 1 2 4 −1 }, and a set of product values { 7 6 −2 −3 } (in Mars dollars M$) where a negative value corresponds to a bonus product. You can apply coupon 3 (with N being 4) to product 1 (with value M$7) to get M$28 back; coupon 2 to product 2 to get M$12 back; and coupon 4 to product 4 to get M$3 back. On the other hand, if you apply coupon 3 to product 4, you will have to pay M$12 to the shop.
Each coupon and each product may be selected at most once. Your task is to get as much money back as possible.
Input Specification:
Each input file contains one test case. For each case, the first line contains the number of coupons N**C, followed by a line with N**C coupon integers. Then the next line contains the number of products N**P, followed by a line with N**P product values. Here 1≤N**C,N**P≤105, and it is guaranteed that all the numbers will not exceed 230.
Output Specification:
For each test case, simply print in a line the maximum amount of money you can get back.
Sample Input:
4
1 2 4 -1
4
7 6 -2 -3
Sample Output:
43
思路
- 简单来说题意就是从
a和b两个数字集合各取1个数字,最后看能算出来的最大和是多少 - 很容易想到的贪心策略是:①正数从大到小乘;②负数从小到大乘
 
代码
#include<bits/stdc++.h>
using namespace std;
int a[100010];
int b[100010];
int main()
{
	int nc,np;
	scanf("%d", &nc);
	for(int i=0;i<nc;i++)	scanf("%d", &a[i]);
	scanf("%d", &np);
	for(int i=0;i<np;i++)	scanf("%d", &b[i]);
	sort(a, a+nc);
	sort(b, b+np);
	int p1 = 0;
	int p2 = 0;
	long long  ans = 0;
	while(p1 < nc && p1 < np && a[p1] < 0 && b[p1] < 0)    //处理负数和负数相乘的情况
	{
		ans += a[p1] * b[p1];
		p1++;
	}
	p1 = nc - 1;
	p2 = np - 1;
	while(p1 >= 0 && p2 >= 0 && a[p1] > 0 && b[p2] > 0)
	{
		ans += a[p1] * b[p2];
		p1--;
		p2--;
	}
	printf("%lld\n", ans);
	return 0;
}
引用
https://pintia.cn/problem-sets/994805342720868352/problems/994805451374313472
PTA(Advanced Level)1037.Magic Coupon的更多相关文章
- PAT (Advanced Level) 1037. Magic Coupon (25)
		
简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...
 - 1037 Magic Coupon (25 分)
		
1037 Magic Coupon (25 分) The magic shop in Mars is offering some magic coupons. Each coupon has an i ...
 - PAT 1037 Magic Coupon[dp]
		
1037 Magic Coupon(25 分) The magic shop in Mars is offering some magic coupons. Each coupon has an in ...
 - PAT 甲级 1037 Magic Coupon (25 分) (较简单,贪心)
		
1037 Magic Coupon (25 分) The magic shop in Mars is offering some magic coupons. Each coupon has an ...
 - PTA(Advanced Level)1036.Boys vs Girls
		
This time you are asked to tell the difference between the lowest grade of all the male students and ...
 - PAT Advanced 1037  Magic Coupon (25) [贪⼼算法]
		
题目 The magic shop in Mars is ofering some magic coupons. Each coupon has an integer N printed on it, ...
 - PAT 甲级 1037 Magic Coupon
		
https://pintia.cn/problem-sets/994805342720868352/problems/994805451374313472 The magic shop in Mars ...
 - 1037 Magic Coupon (25分)
		
The magic shop in Mars is offering some magic coupons. Each coupon has an integer N printed on it, m ...
 - 1037 Magic Coupon
		
The magic shop in Mars is offering some magic coupons. Each coupon has an integer N printed on it, m ...
 
随机推荐
- dblclick([[data],fn]) 当双击元素时,会发生 dblclick 事件。
			
dblclick([[data],fn]) 概述 当双击元素时,会发生 dblclick 事件.大理石量具哪家好 当鼠标指针停留在元素上方,然后按下并松开鼠标左键时,就会发生一次 click.在很短的 ...
 - List根据某字段去重,以及compareTo 浅解
			
原文链接:https://blog.csdn.net/qq_35788725/article/details/82259013 Collections.sort可对集合进行排序 根据List里面某个字 ...
 - 015_使用 expect 工具自动交互密码远程其他主机安装 httpd 软件
			
#!/bin/bash#删除~/.ssh/known_hosts 后,ssh 远程任何主机都会询问是否确认要连接该主机rm -rf ~/.ssh/known_hostsexpect <<E ...
 - IIS遇到过的问题
			
1. IIS的一个莫名错误Server Application Unavailable http://www.kesion.com/zzcd/asp/aspjq/474.html 新打开这个服务ASP ...
 - v-for为什么要加key,能用index作为key么
			
前言 在vue中使用v-for时,一直有几个疑问: v-for为什么要加key 为什么有时候用index作为key会出错 带着这个疑问,结合各种博客和源码,终于有了点眉目. virtual dom 要 ...
 - Noip2001 提高组 T3
			
T3 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包 ...
 - 整理的 linux常用发行版 openstack images   下载地址
			
常见的Linux发行版本官方都提供了用于云环境(如OpenStack)的Image的下载. 发行版 下载地址 fedora 30 http://mirrors.ustc.edu.cn/fedora/r ...
 - Open Live Writer 显示不出来代码着色插件解决办法
			
下载地址: Open Live Writer 插件更新 下载后要把下面这5个文件,全部解除锁定(右键属性打开) Memento.OLW.Plugins.dll OLWPlugins.css OpenL ...
 - CISCO实验记录九:NAT地址转换
			
1.静态NAT地址转换 #ip nat inside source static 192.168.12.1 192.168.23.4 //将12.1转为23.4 必须精确到主机IP 而不能是某个网段 ...
 - pwn学习日记Day7 基础知识积累
			
知识杂项 strncpy(char s1,const char s2,int n); 其中有三个参数分别表示目标字符串s1,源字符串s2,拷贝长度.意思是将s2指向的字符串的前n个长度的字符放到s1指 ...