1002 A+B for Polynomials

简单模拟题,有一些坑点,代码和注释如下:

/*这一次,你应该找到A+B,其中A和B是两个多项式。
输入要求:
每个输入文件包含一个测试用例。每个案例占用2行,每行包含一个多项式的信息:
k N1 aN1 N2 aN2...Nn aNn(k为多项式的数量,N1表示指数,aN1表示系数)
输出:
对于每个测试用例都应该在一行中输出A和B的总和,格式与输入相同。请注意,每行末尾不得有额外的空间。请精确到小数点后1位。*/
#include <iostream>
#include <map>//用hash来存值
#include <vector>
#include <algorithm>
#include <iomanip>//解决保留一位小数
using namespace std;
struct h {
	int zi;//指数
	double xi;//系数
};
bool cmp(h a, h b) {
	return a.zi > b.zi;
}
int main() {
	map<int, double>q;
	int k1, k2;
	cin >> k1;
	for (int i = 0; i < k1; i++) {
		int zi;
		double xi;
		cin >> zi >> xi;
		q[zi] = xi;
	}
	cin >> k2;
	for (int i = 0; i < k2; i++) {
		int zi;
		double xi;
		cin >> zi >> xi;
		q[zi] += xi;
	}
	vector<h>s;
	for (map<int, double>::iterator it = q.begin(); it != q.end(); it++) {
		if (it->second != 0.0) {//不应该把系数为0的元素插入答案中,测试点3-6的原因
			h tes;
			tes.zi = it->first, tes.xi = it->second;
			s.push_back(tes);
		}
	}
	sort(s.begin(), s.end(), cmp);
	cout << s.size() ;//服了,测试点6如果size=0,直接输出0;没有空格,直接移动到下面就行了,傻呗题目
	for (int i = 0; i < s.size(); i++) {
		if (i == 0)cout <<" "<< s[i].zi << " " << setiosflags(ios::fixed) << setprecision(1) << s[i].xi;//测试点2四舍五入保留一位小数
		else cout << " " << s[i].zi << " " << setiosflags(ios::fixed) << setprecision(1) << s[i].xi;
	}
	cout << endl;
	return 0;
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇