https://www.patest.cn/contests/gplt/L2-018

题意:模拟多项式除法。

题解:短除法,初中奥数老师,高中数学老师,高数老师都讲过2333。

   模拟之前,关于保存 多项式的方法。考虑到系数可能很分散(1~1e9),直接用map存(map基本就是为多项式加减法定制的)

    模拟的时候,就是数学课上短除法的算法,注意一下循环终止条件及其控制:当多项式A的最高次系数小于B的时,除不下去,此时A已然为余数。

    模拟完,输出 。本来用stack只是因为auto:t不能逆向输出,结果顺便把四舍五入及删零操作顺便解决了(不理解的地方是floor(x+0.5)对负数(-0.5)为什么也能四舍五入,貌似数据太弱)。

    最后,记得判掉零项

坑:题目没看清,没有特判掉零多项式,然后在那里XJBL改。//改了负数的四舍五入,改了一下及时erase掉系数为0的项,显然并卵。无奈搜了一下题解,ac代码赫然多了一行 “0 0 0”   0_0!


#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#include <cstring>
#include <string>
#include <map>
#include<stack>
#include<set>
#include<string.h>
#include<list>
#define pb push_back
#define mp make_pair
#define _for(i, a, b) for (int i = (a); i<(b); ++i)
#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)


using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
int len;
map<int, float> a, b, c, d;


int main() {
int n; cin >> n;
_for(i, 0, n) {
int x, y;
cin >> x >> y;
a[x] = y;
}
cin >> n;
_for(i, 0, n) {
int x, y;
cin >> x >> y;
b[x] = y;
}

//模拟短除法:
while (a.rbegin()->first >= b.rbegin()->first) {
int e = a.rbegin()->first - b.rbegin()->first;
float f = a.rbegin()->second / b.rbegin()->second;
c[e] += f;
for (auto t : b) {
a[t.first + e] -= f*t.second;
}
if (a.rbegin()->second == 0) a.erase(a.rbegin()->first);


}
//反向输出,四舍五入判定
stack<pair<int, float> > ta, tb;
for (auto t : c) {
float temp = t.second * 10;
temp = floor(temp + 0.5);
if (temp == 0) continue;
else {
temp /= 10;
ta.push(mp(t.first, temp));
}
}
for (auto t : a) {
float temp = t.second * 10;
temp = floor(temp + 0.5);
if (temp == 0) continue;
else {
temp /= 10;
tb.push(mp(t.first, temp));
}
}
cout << ta.size(); if (ta.size() == 0) { cout << " 0 0.0"; }else while (!ta.empty()) { cout << ' ' << ta.top().first << ' '; printf("%.1lf", ta.top().second); ta.pop(); }
cout << endl;
cout << tb.size(); if (tb.size() == 0) {cout << " 0 0.0" ;}else while (!tb.empty()) { cout << ' ' << tb.top().first << ' '; printf("%.1lf", tb.top().second); tb.pop(); }


system("pause");
}
/*1 2 3*/

 

CCCC L2-018. 多项式A除以B 直接上map,然后stack处理输出的更多相关文章

  1. 多项式A除以B

    这个问题我是在PAT大区赛题里遇见的.题目如下: 多项式A除以B(25 分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数 ...

  2. L2-018. 多项式A除以B*

    L2-018. 多项式A除以B 参考博客 #include <iostream> #include <map> #include <cmath> #include ...

  3. (转载) 天梯赛 L2-018. 多项式A除以B

    题目链接 题目描述 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一个非零多项式,先给出 ...

  4. 7-10 多项式A除以B (25分)(多项式除法)

    7-10 多项式A除以B (25分)   这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出 ...

  5. PAT L2-018. 多项式A除以B

    暴力,模拟. 比赛搞了一个小时搞到了$1$分.赛场上不够冷静......之前没接触过多项式除法,但赛场上想到了除法的规则,莫名其妙写的时候不知道哪里崩了.对于这样的题目,应该先测一测数据的指数是不是很 ...

  6. 团体程序设计天梯赛 L2-018. 多项式A除以B(模拟)

    题意:给你A,B两个多项式,问你A/B的值:注意多项式给你的是每个式子的指数与系数:保留到一位小数,如果出现系数为0(保留后也是)的情况,请不要输出它,如果没有非系数为0的情况就输出特殊 题解:多项式 ...

  7. L2-018 多项式A除以B(模拟)

    这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一个非零多项式,先给出A,再给出B.每行的 ...

  8. 7-10 多项式A除以B (25 分)

    题目链接:https://pintia.cn/problem-sets/1108548596745592832/problems/1108548661014913033 题目大意: 这仍然是一道关于A ...

  9. pta l2-18(多项式A除以B)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805060372905984 题意:给定两个多项式,求出其做除法 ...

随机推荐

  1. JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

  2. Hibernate_day03讲义_使用Hibernate完成多对多的关系映射并操作

  3. 5 -- Hibernate的基本用法 --1 1 对象/关系数据库映射(ORM)

    ORM的全称是Object/Relation Mapping ,即对象/关系数据库映射.ORM可理解成一种规范,它概述了这类框架的基本特征:完成面向对象的编程语言到关系数据库的映射.当ORM框架完成映 ...

  4. NetBpm 安装篇(1)

    尊重别人劳动成果 转载注明出处:http://www.cnblogs.com/anbylau2130/p/3875718.html 官方主页 http://www.netbpm.org/docs/in ...

  5. ios开发之--首页 导航栏隐藏 下一级页面显示,pop回来显示白条

    解决方法,在首页中实现如下两个方法,代码如下: -(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated] ...

  6. 【Cesium】坐标理解(转)

    https://blog.csdn.net/qq_34149805/article/details/78393540 1. 经纬度转换为世界坐标 第一种方式:直接转换: Cesium.Cartesia ...

  7. 设置js同源

    1)设置 document.domain 成一样的就行了(前提是都是同一个顶级域名) 2)例如,域名1:news.xxx.com ,域名2:member.xxx.com,这时可以设置它们的 docum ...

  8. linux 下查看cpu信息

    linux 操作系统的位数查看 A. getconf LONG_BIT 如果是32表示是32位 B.  file /sbin/init信息全面一些 root@kali:~/software# file ...

  9. 第1章 Ansible 简介

    1. Ansible 优点 (1) 易读的语法:Ansible使用playbook作为配置管理脚本,playbook是基于YAML开发的,是一种易于读写的数据格式(2) 远程主机无须安装任何依赖:被A ...

  10. 使用 PyQuery

    PyQuery 用法: (1) 前面我们爬取一个网页,都是使用正则表达式来提取想要的信息,但是这种方式比较复杂,一旦有一个地方写错,就匹配不出来了,因此我们可以使用 PyQuery(2) PyQuer ...