2134: 发红包!!!

题目描述

给你两个最简多项式,请输出两个多项式相加后的结果。
给定的多项式的格式为ax^num1+bx^num2+...其中x前面的a,b代表系数num代表指数(次方数),输入按照多项式的指数从高到低,
输入的x项系数不包含前导0,系数为整数,系数的绝对值小于等于200,指数为正数且指数小于等于200。 输入 第一行一个case代表测试实例(case<=)
第二行一个字符串,代表第一个最简多项式。
第三行一个字符串,代表第二个最简多项式。 输出 一个字符串,代表相加后的最简多项式。

样例输入(新加了几组样例,基本涵盖了所有的后台样例)
1
2x^3+3x+5 4x^2-
2x
0 0
-9 8
922 -81
x^2 1x^55
2x^2+x+32 12
x^12 32
-x^3 x^2

样例输出 2x^+4x^+x+

大致思路:

  暴力模拟,先整体把字符串逐个处理成仅包含前缀系数a和幂的b ,然后存进ans[ 幂数 ] =前缀系数 的ans数组中,最后注意“-1”和“1”的前缀系数!

 #include <iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<math.h>
#include<map>
#include<set>
#define ll long long
using namespace std;
#define N 1000008
#define lson rt<<1
#define rson rt<<1|1
struct node{
ll a,b;
}p[N];
ll ans[N];
int cnt; //表示个数 char s1[N],s2[N];
void cul(char s[]){
int len=strlen(s);
for(int i=;i<len;){ //挖掘ax^b+
ll op=;
if(s[i]=='+'){
i++;
}
else if(s[i]=='-'){
op=-;
i++; } int a=,b=;
bool f=,g=; while(i<len&&s[i]!='+'&&s[i]!='-'){
if(s[i]=='x'){
i++;
f=;
continue;
} if(f==&&s[i]>=''&&s[i]<=''){
a=a*+s[i]-'';
}
else if(f==&&s[i]>=''&&s[i]<=''){ b=b*+s[i]-'';
g=;
}
i++;
}
a*=op;
if(f==&&a==)a=*op;
if(f==&&b==&&g==)b=; p[++cnt].a=a;
p[cnt].b=b;
} }
void debug(){ for(int i=;i<=cnt;i++)
printf("【【【 %lldx^%lld\n",p[i].a,p[i].b);
}
int main(){ int T;
scanf("%d",&T);
for(int t=;t<=T;t++){
scanf("%s%s",s1,s2);
cnt=;
cul(s1);
cul(s2); // debug(); //调试函数
// printf("%lld %lld\n",p[1].a,p[1].b);
// printf("%lld %lld\n",p[2].a,p[2].b); memset(ans,,sizeof(ans)); for(int i=;i<=cnt;i++){
ans[p[i].b]+=p[i].a ;
} int f=;
for(int i=;i>=;i--){ //遍历次方数 if(ans[i]!=){
if(!f&&i==){ //对最后零项(特殊处理)
if(ans[]!=){
// if(ans[i]>0)cout<<"+";
printf("%lld",ans[i]);
f=;
}
break;
}
else if(i==){
if(ans[]!=){
if(ans[i]>)cout<<"+";
printf("%lld",ans[i]);
f=;
}
break;
} if(!f){
f=;
if(ans[i]!=&&ans[i]!=-)cout<<ans[i];
else if(ans[i]==-)cout<<"-"; if(i==)cout<<"x";
else if(i>)
cout<<"x^"<<i; }
else{
if(ans[i]>) cout<<"+"; if(ans[i]!=&&ans[i]!=-)cout<<ans[i];
else if(ans[i]==-)cout<<"-"; if(i==)cout<<"x";
else if(i>)
cout<<"x^"<<i;
}
}
}
if(f==)cout<<"";
cout<<endl;
} return ;
}

(面向后台数据编程)

zznu-oj-2134- 发红包!!!-【多项式加法,模拟题目】的更多相关文章

  1. 微信小程序发红包

    背景: 近期一个朋友公司要做活动,活动放在小程序上.小程序开发倒是不难,不过要使用小程序给微信用户发红包,这个就有点麻烦 确定模式: 小程序目前没有发红包接口,要实现的话,只能是模拟红包,即小程序上做 ...

  2. JAVA发红包案例

    模拟拼手气红包* 对于指定总金额以及红包个数,可以生成不同金额的红包,*,每个红包金额随机生成. * 分析这个题目:* 1.首先需要一个分发红包的方法.输入的参数是 总金额 以及 红包个数.* 按照这 ...

  3. 程序设计入门——C语言 第7周编程练习 1多项式加法(5分)

    第7周编程练习 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...

  4. PHP实现发红包程序

    我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第 ...

  5. PHP实现发红包程序(helloweba网站经典小案例)

    我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第 ...

  6. 使用PHP编写发红包程序

    使用PHP编写发红包程序 http://www.jb51.net/article/69815.htm 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-07-22   微信发红 ...

  7. js 发红包

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  8. 网易云课堂_程序设计入门-C语言_第六章:数组_1多项式加法

    1 多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的 ...

  9. 发红包android

    立即春节,写个应景的控件         思路分析 1.红包沿着不同的轨迹由上往下运动 2.当手指捕获到一个红包,红包停止原先的运动,能够随着手指的滑动做跟手操作 3.当手指动作停止后,红包放大 4. ...

随机推荐

  1. 在C/C++中常用的符号

    C++中&和*的用法一直是非常让人头疼的难点,课本博客上讲这些知识点一般都是分开讲其用法的,没有详细的总结,导致我在这方面的知识结构格外混乱,在网上找到了一篇英文文章简单总结了这两个符号的一些 ...

  2. 【leetcode算法-简单】53. 最大子序和

    [题目描述] 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:  ...

  3. FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated;

    /Users/jerryqi/PycharmProjects/DeepLearning/venv/lib/python3.7/site-packages/tensorflow/python/frame ...

  4. vue element-ui typescript tree报错 === Property 'getCheckedNodes' does not exist on type 'Element | Element[] | Vue | Vue[]'.

    import { Tree } from 'element-ui' const ref = <Tree>this.$refs.tree ref.getCheckedNodes()

  5. K8S从入门到放弃系列-(12)Kubernetes集群Coredns部署

    摘要: 集群其他组件全部完成后我们应当部署集群 DNS 使 service 等能够正常解析,1.11版本coredns已经取代kube-dns成为集群默认dns. 1)下载yaml配置清单 [root ...

  6. SrpingBoot入门到入坟03-基于idea快速创建SpringBoot应用

    先前先创建Maven项目然后依照官方文档再然后编写主程序写业务逻辑代码才建立好SpringBoot项目,这样太过麻烦,IDE都支持快速创建,下面基于idea: 使用Spring Initializer ...

  7. VS2010 安装boost库

    1.下载boost库 boost官网:www.boost.org,目前最新的版本是1.64,直接下载地址:https://dl.bintray.com/boostorg/release/1.64.0/ ...

  8. js基础——数组的概念及其方法

    数组: 概念:是一种特殊的对象. 与普通对象的区别:a.普通对象使用字符串作为属性名,而数组使用数字作为索引来操作元素: b.数组的存储性能比普通对象好 数组的标志:[ ] 数组的索引:是从0开始的整 ...

  9. S03_CH05_AXI_DMA_HDMI图像输出

    S03_CH05_AXI_DMA_HDMI图像输出 5.1概述 本课程是在前面课程基础上添加HDMI IP 实现HDMI视频图像的输出.本课程出了多了HDMI输出接口,其他内容和<S03_CH0 ...

  10. (转) 从0移植uboot(五) _实现串口输出

    ref : https://www.cnblogs.com/xiaojiang1025/p/6500520.html 串口作为一种非常简单的通信方式,才是嵌入式系统调试的王道,通过设置串口输出,我们可 ...