浏览器标题切换
浏览器标题切换end

PTA - A+B for Polynomials - 多项式计算 - 暴力+STL

我愣是没看懂给的公式是个啥意思,英文也有几个不认识的……好傻我……

题意

给出两行数,

每行数首先给出一个 N ,表示接下去有 N 对数。

每一对数给出 ab,分别代表 指数 和 系数,

求这两行的和,即求所有项的和 -> 多项式的和。

输出要求:
项数 指数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

注意

  1. PS:系数为0的不要输出

  2.   mp.insert(make_pair("a",3));    =     mp.insert(pair<string,int>("b",5));
    
  3. map内部默认按照KEY值递增排序,本题需要递减,则定义map的时候写成以下代码即可。(我的补充里面有别的方法,但是我没看懂怎么使用)

    map<int,double,greater<int>> mp; // 按KEY值递减插入数据
    

思路

  1. 注意一下本题map的写法和迭代器的使用即可。好久没用了。

  2. 输入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自定义排序的博客:

结构体重载:

posted @   抓水母的派大星  阅读(90)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2020-01-28 寒假Day13:最小费用最大流问题(变形) POJ3680-Intervals(最大费用最大流)
点击右上角即可分享
微信分享提示