PAT甲级(12):Magic Coupon

2024-01-20 18:59
文章标签 pat magic 甲级 coupon

本文主要是介绍PAT甲级(12):Magic Coupon,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自己的思路(总会部分错误)

1、将两行数按正数从大到小排列,负数从小到大排列,这样每次就可以相同符号绝对值最大的数相乘。
在这里插入图片描述
2、如果遍历完一次就将两个数的flag置位false表示使用过。

#include <iostream>
#include <algorithm>
using namespace std;struct cp{int value;bool flag = true;   //true代表没用过
};
bool cmp1(cp a,cp b)
{return a.value > b.value;
}bool cmp2(cp a,cp b)
{return a.value<b.value;
}int main()
{int CN,PN,index1,index2;cin >> CN;struct cp c[CN];for(int i=0;i<CN;i++) cin >> c[i].value;sort(c,c+CN,cmp1);for(int i=0;i<CN;i++){if(c[i].value < 0){index1 = i;break;}}sort(c+index1,c+CN,cmp2);//正数从大到小排列,负数从小到大排列cin >> PN;struct cp p[PN];for(int i=0;i<PN;i++) cin >> p[i].value;sort(p,p+PN,cmp1);for(int i=0;i<PN;i++){if(p[i].value < 0){index2 = i;break;}}sort(p+index2,p+PN,cmp2);//正数从大到小排列,负数从小到大排列int maxx[100] = {0};int index= 0;int sum = 0,tmp1,tmp2;for(int i=0;i<CN;i++){int countt = 0;for(int j=0;j<PN;j++){if(c[i].value*p[j].value>0 && (c[i].flag&&p[j].flag == true)){if(c[i].value*p[j].value>maxx[index]){maxx[index] = c[i].value*p[j].value;tmp1 = i;tmp2 = j;countt++;}}}if(countt !=0){//cout << maxx[index] << " " << c[tmp1].value << " " << p[tmp2].value;c[tmp1].flag = false;p[tmp2].flag = false;index++;}}for(int i=0;i<100;i++){if(maxx[i]!=0) sum+=maxx[i];}cout << sum;return 0;
}

别人的代码(真简单。。)

#include <iostream>
#include <algorithm>
using namespace std;const int N = 1e5+10;
typedef long long LL;
int c[N],p[N];int main(){int n,m;LL ans = 0;cin >> n;for(int i = 0; i < n; i++) cin >> c[i];cin >> m;for(int i = 0; i < m; i++) cin >> p[i];sort(c,c+n),sort(p,p+m);for(int i = 0; i <n&&i<m&&c[i]<0&&p[i]<0; i++) ans += (LL)c[i]*p[i];for(int i = n-1,j = m-1; i>=0&&j>=0&&c[i]>0&&p[j]>0;i--,j--) ans += (LL)c[i]*p[j];cout << ans;
}

这篇关于PAT甲级(12):Magic Coupon的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/626994

相关文章

PAT甲级-1044 Shopping in Mars

题目   题目大意 一串项链上有n个钻石,输入给出每个钻石的价格。用m元买一个连续的项链子串(子串长度可为1),如果不能恰好花掉m元,就要找到最小的大于m的子串,如果有重复就输出多个,按递增顺序输出子串的前端和后端索引。 原来的思路 取连续的子串使和恰等于m,没有恰等于就找最小的大于。可以将子串依次累加,使得每个位置都是起始位置到该位置的序列和,整个数组显递增顺序,就可以用右边减左边

PAT (Advanced Level) Practice——1011,1012

1011:  链接: 1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn) 题意及解题思路: 简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。 同时还需要记录每一次选择的是W,T还是L

Qlik数据集成 | Qlik 连续 14 年稳居 2024 Gartner® ABI Magic Quadrant™ 领导者

Qlik 再次当选 2024 年 Gartner® 分析和商业智能平台 Magic Quadrant™ 领导者! 近日,作为引领当今数据集成、数据质量和分析解决方案市场的行业领导者, Qlik 再次当选 2024 年 Gartner® 分析和商业智能平台 Magic Quadrant™ 领导者! 得益于 Qlik 在愿景完备性和执行能力方面的出色表现,这已经是 Qlik 第 14 年位居领导者象

Magic推出100M个token的上下文

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/ 目前,AI模型有两种学习方式:一种是通过训练,另一种是在推理过程中通

PAT (Advanced Level) Practice

1001:  题目大意: 计算 a+b 的结果,并以标准格式输出——即每三个数字一组,组之间用逗号分隔(如果数字少于四位,则不需要逗号分隔)  解析: 我们知道相加右正有负,对于样例来说 Sample Input: -1000000 9 Sample Output: -999,991 如果是从左往右,算上负号的话输出应该是-99,999,1 从右往左:-,999,991离正确

1050 String Subtraction——PAT甲级

Given two strings S1​ and S2​, S=S1​−S2​ is defined to be the remaining string after taking all the characters in S2​ from S1​. Your task is simply to calculate S1​−S2​ for any given strings. However,

SDUT2880 Devour Magic 线段树(set+add标记)

Devour Magic Time Limit: 2000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 In Warcraft III, Destroyer is a large flying unit that must consume magic to sustain its mana. Breaking fre

P2730 [USACO3.2] 魔板 Magic Squares

[USACO3.2] 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板。这是一张有 8 8 8 个大小相同的格子的魔板: 1 2 3 4 1\quad2\quad3\quad4 1234 8 7 6 5 8\quad7\quad6\quad5 8765 题目描述 我们知道魔板的每一个方格都有一种颜色。这 8 8 8 种颜

HDU1153——Magic Bitstrings,HDU1171——Big Event in HDU,HDU1261——字串数

HDU1153——Magic Bitstrings 题目描述 问题 - 1153 (hdu.edu.cn) 运行代码 #include <iostream>#include <vector>int main() {long long p;while (std::cin >> p) {if (p == 0) break;if (p == 2) {std::cout << "Imposs

MemSQL Start[c]UP 2.0 - Round 1 C. Magic Trick

Codeforces MemSQL Start[c]UP 2.0 - Round 1 C. Magic Trick 首先,我们先假设有抽出的牌样式为A 则,抽到同样的牌(不是同样类型)的概率为 1 / N 则,抽到不同的牌的概率为 N-1 / N 此时抽到A类型的概率为,在原来的N*M张中去掉我们最先抽出的一张A,再从中抽出剩下的 M-1张A类牌 综上所述,答案为 1 / N + (