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. vue路由传参的三种方式

    方式一 通过query方式传参 这种情况下 query传递的参数会显示在url后面 this.$router.push({ path: '/detail', query: { id: id } }) ...

  2. php 大数组 foreach 循环嵌套的性能优化

    前提:最近在做后台的时候,页面加载太慢,故第一时间想到的自然是优化SQL, 优化后sql查询速度从 2秒变成了零点几秒, 以为就这麽完事了,然并卵,加载竟然花费30秒! 这麽慢,然后在代码中分块记录它 ...

  3. 第一周-----Java 的核心优势和生态体系——程序员们希望他们编写的程序能够运行在不同的机器,不同的环境中,这需要一种体系中立的语言(即跨平台)。

    跨平台是Java 语言的核心优势,赶上最初互联网的发展,并随着互联网的发展而发展,建立了强大的生态体系,目前已覆盖IT各个行业的“第一大语言,称为IT界的英语”

  4. 前后端分离,如何防止api接口被恶意调用或攻击

    无论网站,还是App目前基本都是基于api接口模式的开发,那么api的安全就尤为重要了.目前攻击最常见的就是“短信轰炸机”,由于短信接口验证是App,网站检验用户手机号最真实的途径,使用短信验证码在提 ...

  5. CentOS7.0 yum安装 docker

    一.安装docker 1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . root 用户登录操作! 通过  ...

  6. python学习-18 元组

    tuple 1.元组tuple类似列表,由小括号()括住,其中的元素不可被修改,不能被增加或删除. tu = (222,222123123,("小胡子",444),12341,&q ...

  7. python学习-16 列表list

    list 1.由[ ]括住,中括号内各元素由逗号隔开,各元素可以是数字,字符串,列表,布尔值等等. 例如: li = [521,"love",["john",& ...

  8. PostgreSql-psql命令的使用

    安装好postgresql后,将路径:安装路径\bin,添加到环境变量path中,这样才有了使用psql命令的前提. 使用psql命令时,不需要进入postgresql数据库,直接在命令行使用即可,若 ...

  9. WUSTOJ 1285: Factors(Java)

    1285: Factors 参考   hadis_fukan的博客--wustoj 1285 Factors 题目   输入一个数n,找出1~n之间(包括1,n)的质因子最多的数(x)的质因子个数(f ...

  10. Gossip协议

    Gossip数据传播协议: Fabric通过将工作负载划分到事务执行(背书和提交)对等节点和事务排序节点,优化了区块链网络性能.安全性和可伸缩性.这种网络操作的解耦需要一个安全.可靠和可伸缩的数据传播 ...