PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642

题目描述:

This time, you are supposed to find A+B where A and B are two polynomials.

译:这一次,你要找到 A + B ,其中 A , B 是两个多项式


Input Specification (输入说明):

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK

where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1 ≤ K ≤ 100 ≤ NK < ⋯ < N2 < N1 ≤ 1000.

译:每个输入文件包含一个测试用例,每个用例占两行,每行包含多项式的如下信息 : K N1 aN1 N2 aN2 ... NK aNKk是多项式中非零项的个数,NiaNi (i=1,2,⋯,K) 分别表示多项式的 指数 和 系数。 已知 1 ≤ K ≤ 100 ≤ NK < ⋯ < N2 < N1 ≤ 1000.


Output Specification (输出说明):

For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.

译:对于每个测试用例,你应该在一行中输出 A + B 的和,和输入具有相同的格式。注意:在行末不能有多与的空格,并且精确到1位小数。


Sample Input (样例输入):

2 1 2.4 0 3.2
2 2 1.5 1 0.5

Sample Output (样例输出):

3 2 1.5 1 2.9 0 3.2

The Idea:

/*
(1) 对于多项式的存储,由于每一个指数 int 型对应有一个系数 double 型 ,故利用 map ,
由于输出的时候需要按照系数从大到小的输出,所以利用 按照 key 的值降序排列的 map 结构。
*/
map<int , double , greater<int> > mp; /*
(2) 但是值得注意的是:题目中说明是非零项的个数,那么很有可能在相加的时候出现系数为 0 的时候
这种时候显然这一项已经不符合我们的要求。
为此我再设立了一个 map 用来存储满足要求的答案
*/

The Codes:

#include<bits/stdc++.h>
using namespace std ;
map<int , double , greater<int> > mp ;// 储存最初 A + B 的和 ,默认排序方式为 key 的降序
map<int , double , greater<int> > ans ; // 储存本题 A + B 的和 ,默认排序方式为 key 的降序
int main(){
int k1 , k2 , n ;
double an ;
cin >> k1 ; // 输入 A 的非零项数 以及每一项的 指数 和 系数
for(int i = 0 ; i < k1 ; i ++){
cin >> n >> an ;
mp[n] += an ; // 以指数为 key ,输入的 值 增加到 value 上
}
cin >> k2 ; // 输入 B 的非零项数 以及每一项的 指数 和 系数
for(int i = 0 ; i < k2 ; i ++){
cin >> n >> an ;
mp[n] += an ; // 以指数为 key ,输入的 值 增加到 value 上
}
for(map<int,double,greater<int> >::iterator it =mp.begin() ; it != mp.end() ;it ++)
if(fabs((*it).second ) > 1e-6) // 浮点数,判断是否 系数相加之后 为 0
ans[(*it).first] = (*it).second ;// 非零项用 ans 存储
cout << ans.size() ; // 输出 A + B 的和 非零项数
for(map<int,double,greater<int> >::iterator it =ans.begin();it != ans.end();it++){
//cout<<" "<<(*it).first<<" "<<(*it).second;
printf(" %d %.1f",(*it).first,(*it).second);
}
cout << endl ; // 行尾换行符
return 0;
}

PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642的更多相关文章

  1. PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642 题目描述: Given any string of N (≥5) ...

  2. PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642 题目描述: Notice that the number ...

  3. PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642 题目描述: 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每 ...

  4. PAT (Advanced Level) Practice 1002 A+B for Polynomials 分数 25

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...

  5. PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)

    Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...

  6. PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642 题目描述 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下 ...

  7. PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642 题目描述: "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大 ...

  8. PAT (Advanced Level) Practice 1006 Sign In and Sign Out (25 分) 凌宸1642

    PAT (Advanced Level) Practice 1006 Sign In and Sign Out (25 分) 凌宸1642 题目描述: At the beginning of ever ...

  9. PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 目录 PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) ...

随机推荐

  1. HTML5 download 执行条件

    HTML5 download 执行条件 同一个域名下的资源 http only 绝对路径/相对路径 都可以 demo https://cdn.xgqfrms.xyz/ https://cdn.xgqf ...

  2. Chrome offline game & source codes hacker

    Chrome offline game & source codes hacker dino === little dinosaur chrome://dino/ 手动 offline htt ...

  3. 中文域名 & 原理剖析

    中文域名 & 原理剖析 https://zh.wikipedia.org/wiki/中文域名 原理 利用浏览器的对字符编码的转换算法,实现 unicode 字符显示! 国际化域名: 就是一个普 ...

  4. Chrome V8 系统架构

    Chrome V8 系统架构 Chromium 多进程多线程架构 design-documents https://www.chromium.org/developers/design-documen ...

  5. jsbridge 原理 & 通信原理

    jsbridge 原理 & 通信原理 Hybrid 方案是基于 WebView 的,JavaScript 执行在 WebView 的 Webkit 引擎中; 因此,Hybrid 方案中 JSB ...

  6. Object.stringify 循环引用 bug & TypeError: Converting circular structure to JSON

    Object.stringify 循环引用 bug & TypeError: Converting circular structure to JSON var obj = { a: &quo ...

  7. perl 打印目录结构

    更多 #!/usr/bin/perl # 递归打印目录结构 use v5.26; use strict; use utf8; use autodie; use warnings; use Encode ...

  8. NGK DeFi Baccarat或将推动BGV成为下一个千倍币!

    目前,已经接近2020年年末,但是DeFi的热潮还在持续.近日,DeFi市场传出一道重磅利好消息,便是NGK DeFi去中心化交易系统Baccarat即将上线.届时,将会引起整个区块链市场的又一次震动 ...

  9. 消息中间件选型分析:从 Kafka 与 RabbitMQ 的对比看全局

    本文转载自消息中间件选型分析:从 Kafka 与 RabbitMQ 的对比看全局 前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布 ...

  10. smart-adminx项目导入依赖时,点击reinport时没反应且依赖全部报红的解决办法

    依赖报红的解决办法 报红效果如下: 原因分析:下载jar包时,出现大量以.lastUpdated结尾的无效文件. 解决办法:使用bat批处理文件批量删除无效文件 set REPOSITORY_PATH ...