PTA - A+B for Polynomials - 多项式计算 - 暴力+STL
我愣是没看懂给的公式是个啥意思,英文也有几个不认识的……好傻我……
题意
给出两行数,
每行数首先给出一个 ,表示接下去有 对数。
每一对数给出 和 ,分别代表 指数 和 系数,
求这两行的和,即求所有项的和 -> 多项式的和。
输出要求:
项数 指数1 系数1 指数2 系数2……
(系数保留一位小数)
样例解释
题目给出:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
把所有的数据写成多项的形式:
2.4a^1 3.2a^0
1.5a^2 0.5a^1
所有项相加得:
2.4a+3.2+1.5a^2+0.5a
合并得:
2.9a+3.2+1.5a^2
指数从大到小排序后得:(共3项)
1.5a^2 2.9a^1 3.2a^0
注意
-
PS:系数为0的不要输出
-
mp.insert(make_pair("a",3)); = mp.insert(pair<string,int>("b",5));
-
map内部默认按照KEY值递增排序,本题需要递减,则定义map的时候写成以下代码即可。(我的补充里面有别的方法,但是我没看懂怎么使用)
map<int,double,greater<int>> mp; // 按KEY值递减插入数据
思路
-
注意一下本题map的写法和迭代器的使用即可。好久没用了。
-
输入a和b,a是int型指数,我们可以把它看做KEY,b是double型系数,我们可以把它看做VALUE,故map里面放的顺序应该是 int,double ,别搞错了。
AC代码
#include<iostream>
#include<string.h>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
int main()
{
map<int,double,greater<int>> mp; // 按Key值递减插入数据
int n,a;
cin>>n;
double b; //b系数value double;a指数key int
for(int i=0;i<n;i++)
{
cin>>a>>b;
mp[a]+=b;
}
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a>>b;
mp[a]+=b;
}
// cout<<mp.size(); 排除系数为0的项
map<int,double>::iterator it; //遍历输出
int k=0;
for(it=mp.begin();it!=mp.end();it++)
if(it->second!=0)
k++;
cout<<k;
for(it=mp.begin();it!=mp.end();it++)
if(it->second!=0)
printf(" %d %.1lf",it->first,it->second);
cout<<endl;
return 0;
}
补充
关于STL自定义排序的博客:
结构体重载:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2020-01-28 寒假Day13:最小费用最大流问题(变形) POJ3680-Intervals(最大费用最大流)