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. kali安装chrome

    文章搬到自己的网站上,如下: http://101.132.137.140:202/archives/2019-11-25

  2. angular入门 - 环境安装及项目创建

    1.安装node.js 下载,安装,在终端测试安装是否成功:node -v(查看nodejs版本) npm -v(查看npm版本) 下载地址:https://nodejs.org/en/downloa ...

  3. PL/SQL链接Oracle数据库 导出表结构和表数据

    打开pl/sql客户端(导出数据表结构) 在左侧 点击tabales 2 Tools-->Export User Objects,导出sql格式的文件 3 红色1 是你要选择导出的表,红色2 是 ...

  4. javascript判断碰撞检测

    javascript判断碰撞检测 点与矩形的碰撞检测 <pre> /** * * @param x1 点 * @param y1 点 * @param x2 矩形view x * @par ...

  5. C#基础知识学习 三

  6. 工作总结--CTO(张王岩)File的使用

    名称     路径分隔符 pathSeparator   separator 构造器 文件名.路径名 getName()  getPath() getAbsolutePath()  getParent ...

  7. 《ucore lab1 exercise3》实验报告

    资源 ucore在线实验指导书 我的ucore实验代码 题目:分析bootloader进入保护模式的过程 BIOS将通过读取硬盘主引导扇区到内存,并转跳到对应内存中的位置执行bootloader.请分 ...

  8. Word 查找替换高级玩法系列之 -- 用替换功能删除空白区域

    当你遇到Word文档中时不时的出现一些空白区域的时候会怎么办呢?一个个删除吗?NO!NO!NO!!!那样也太慢了!仅使用替换功能就可以帮你一步搞定它! 下面这篇文档中含有半角空格.全角空格.不间断空格 ...

  9. 剑指offer15:反转链表后,输出新链表的表头。

    1 题目描述 输入一个链表,反转链表后,输出新链表的表头. 2 思路和方法 (1)利用栈作为中间存储,进行链表的反转,将压入的数据按先进后出的顺序弹出依次赋给链表再输出表头pHead. (2)将当前节 ...

  10. SASS摘要

    SASS提高了代码的重复利用率,提高了效率.不用去记或者查找复杂或者繁琐的参数和书写规则. 这里简单整理了实际业务中常常用到的几个功能. 1. 父元素引用 & a { &:hover ...