Description

给定一个多项式,输出其化简后的结果。

Input

一个字符串,只含有关于字母x 的多项式,不含括号与分式,没有多余的空格。

Output

一个字符串,化简后的多项式,按照次数从大到小的顺序输出各项。

Input Sample

x^3+3*x^4-2*x^3+1-x

Output Sample

3*x^4-x^3-x+1

Hint

每项系数<10,次数<6,项数<20。字符串长度不超过100。

很烦的模拟   代码如下:

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const int maxn=1000+10;
  5. string s;
  6. int a[maxn],lc=1,len;
  7. bool first=true;
  8. int main()
  9. {
  10. // freopen("simplify.in","r",stdin);
  11. // freopen("simplify.out","w",stdout);
  12. cin>>s;
  13. len=s.size();
  14. if(len==1)
  15. {
  16. cout<<s[0];
  17. return 0;
  18. }
  19. for(int i=0;i<len;i++)
  20. {
  21. if(s[i]=='x')
  22. {
  23. if(i==3)
  24. {
  25. if(s[0]=='-')
  26. {
  27. if(s[4]=='^')
  28. {
  29. a[s[5]-'0']-=s[1]-'0';
  30. }
  31. else
  32. {
  33. a[1]-=s[1]-'0';
  34. }
  35. continue;
  36. }
  37. }
  38. if(s[0]>='0'&&s[0]<='9'&&i==2)
  39. {
  40. if(s[3]=='^')
  41. {
  42. a[s[4]-'0']+=s[0]-'0';
  43. }
  44. else
  45. {
  46. a[1]+=s[0]-'0';
  47. }
  48. continue;
  49. }
  50. // if(i==0)
  51. // {
  52. // a[1]++;
  53. // continue;
  54. // }
  55. if(s[i+1]=='^')
  56. {
  57. if(i==0)
  58. {
  59. a[s[i+2]-'0']++;
  60. continue;
  61. }
  62. if(s[i-1]=='*')
  63. {
  64. if(s[i-3]=='+')
  65. a[s[i+2]-'0']+=s[i-2]-'0';
  66. else if(s[i-3]=='-')
  67. a[s[i+2]-'0']-=(s[i-2]-'0');
  68. }
  69. else
  70. {
  71. if(i==0)
  72. {
  73. a[s[i+2]-'0']++;
  74. continue;
  75. }
  76.  
  77. if(s[i-1]=='+'||s[i-1]=='-')
  78. {
  79. if(s[i-1]=='-')
  80. a[s[i+2]-'0']--;
  81. else
  82. a[s[i+2]-'0']++;
  83. }
  84. else
  85. {
  86. a[s[i+2]-'0']--;
  87. }
  88. }
  89. }
  90. else
  91. {
  92. if(s[i-1]=='+')
  93. {
  94. a[1]++;
  95. }
  96. else
  97. {
  98. a[1]--;
  99. }
  100. }
  101. }
  102. else
  103. {
  104. if(s[i]>='0'&&s[i]<='9')
  105. {
  106. if(s[i-1]=='^'||s[i+1]=='*')
  107. continue;
  108. a[0]+=s[i]-'0';
  109. }
  110. }
  111. }
  112. for(int i=0;i<len;i++)
  113. {
  114. if(s[i]=='^')
  115. lc=max(lc,s[i+1]-'0');
  116. }
  117. for(int i=lc;i>=0;i--)
  118. {
  119. if(a[i]==0)
  120. continue;
  121. if(i==0)
  122. {
  123. if(a[i]>0)
  124. {
  125. if(first)
  126. {
  127. cout<<a[i];
  128. first=false;
  129. continue;
  130. }
  131. cout<<'+'<<a[i];
  132. }
  133. else
  134. {
  135. cout<<'-'<<a[i];
  136. }
  137. continue;
  138. }
  139. if(i==1)
  140. {
  141. if(a[i]>0)
  142. {
  143. if(a[i]==1)
  144. {
  145. if(first)
  146. {
  147. cout<<"x";
  148. first=false;
  149. continue;
  150. }
  151. cout<<"+x";
  152. }
  153. else
  154. {
  155. if(first)
  156. {
  157. cout<<a[i]<<"*x";
  158. first=false;
  159. continue;
  160. }
  161. cout<<"+"<<a[i]<<"*x";
  162. }
  163. }
  164. else
  165. {
  166. if(a[i]==-1)
  167. {
  168. cout<<"-x";
  169. }
  170. else
  171. {
  172. cout<<a[i]<<"*x";
  173. }
  174. }
  175. continue;
  176. }
  177. if(a[i]>0)
  178. {
  179. if(a[i]==1)
  180. {
  181. if(first)
  182. {
  183. cout<<"x^"<<i;
  184. first=false;
  185. continue;
  186. }
  187. else
  188. {
  189. cout<<"+x^"<<i;
  190. }
  191.  
  192. }
  193. else
  194. {
  195. if(first)
  196. {
  197. cout<<a[i]<<"*x^"<<i;
  198. first=false;
  199. continue;
  200. }
  201. else
  202. {
  203. cout<<"+"<<a[i]<<"*x^"<<i;
  204. cout<<9999999<<endl;
  205. }
  206. }
  207.  
  208. }
  209. else
  210. {
  211. if(a[i]==-1)
  212. {
  213. cout<<"-x^"<<i;
  214. }
  215. else
  216. {
  217. cout<<a[i]<<"*x^"<<i;
  218. }
  219. }
  220. }
  221. // cout<<endl;
  222. // for(int i=8;i>=0;i--)
  223. // cout<<a[i]<<' ';
  224. // cout<<endl;
  225. // cout<<a[3]<<endl;
  226. return 0;
  227. }

YZOI Easy Round 2_化简(simplify.c/cpp/pas)的更多相关文章

  1. YZOI Easy Round 2_回文串 string

    原文链接:http://laphets1.gotoip3.com/?id=18 Description 给出一个由小写字母组成的字符串,其中一些字母被染黑了,用?表示.已知原来的串不是 一个回文串,现 ...

  2. HDU 4565 So Easy! 数学 + 矩阵 + 整体思路化简

    http://acm.hdu.edu.cn/showproblem.php?pid=4565 首先知道里面那个东西,是肯定有小数的,就是说小数部分是约不走的,(因为b限定了不是一个完全平方数). 因为 ...

  3. 【mongoDB高级篇②】大数据聚集运算之mapReduce(映射化简)

    简述 mapReduce从字面上来理解就是两个过程:map映射以及reduce化简.是一种比较先进的大数据处理方法,其难度不高,从性能上来说属于比较暴力的(通过N台服务器同时来计算),但相较于grou ...

  4. matlab化简符号表达式

    化简符号表达式计算机毕竟还是挺笨的, 经过一系列的符号计算后, 得到的结果可能只有它自己才能看懂, Matlab提供大量函数以用于符号表达式的化简. collect(f): 函数用途是合并多项式中相同 ...

  5. NOIP201402比例化简

    比例化简 [问题描述]在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为1498:9 ...

  6. 化简复杂逻辑,编写紧凑的if条件语句

    当业务逻辑很复杂,涉及多个条件的真假,或者多种条件下都会执行同一动作时,如何编写紧凑的if语句呢?本文借由一个实际例子,利用数学的布尔逻辑整理条件,最终产生if语句. 问题 在<X3 重聚> ...

  7. 《Linear Algebra and Its Application》-chaper1-行化简法解决线性方程组

    在实际生产生活中,需要我们解大量的线性方程组,例如是有探测.线性规划.电路等,这里我们便从理论角度建立一套解决线性方程组的体系. 线性方程组: 形如下面形式的方程组称为线性方程组. 回想起解决二元线性 ...

  8. poj3708:函数式化简+高精度进制转换+同余方程组

    题目大意 给定一个函数 找出满足条件   等于 k 的最小的x m,k,d已知 其中 m,k 很大需要使用高精度存储 思路: 对 函数f(m)进行化简 ,令t=ceil( log(d,m) ) 可以得 ...

  9. 化简复杂逻辑,编写紧凑的if条件语句(二):依据if子句顺序化简条件

    <化简复杂逻辑,编写紧凑的if条件语句>已经得出了跳.等.飞.异常的各自条件,方便起见这里重新贴一下. 立即跃迁:!a && b && d 等待跃迁:!a ...

随机推荐

  1. CPSR和SPSR(转)

    转载地址:http://blog.chinaunix.net/uid-28458801-id-3487199.html CPSR:程序状态寄存器(current program status regi ...

  2. Classical Inheritance in JavaScript

    JavaScript is a class-free, object-oriented language, and as such, it uses prototypal inheritance in ...

  3. 输入框修改placeholde颜色

    ::-webkit-input-placeholder { color: red; } :-moz-placeholder {/* Firefox 18- */ color: red; } ::-mo ...

  4. Yii 通过composer 安装的方法

    Yii2框架可以通过两种方式 安装 : 第一种方法: Yii2有两个模板 一个是基础模板,一个是高级模板,基础可能简单点吧.........,现在直接从   https://github.com/yi ...

  5. [D3] 11. Basic D3 chart interactivity on(), select(this), classed(class, trueorfalse)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. Hadoop-2.2.0中文文档—— Common - 服务层认证

    目的 此文档描写叙述了怎样为Hadoop配置和管理 Service Level Authorization . 预备条件 确保已经安装Hadoop,配置和设置都正确了. 很多其它细节,请看:* 首次使 ...

  7. PHP文件头部(header)解释

    1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Charset:   浏览器申 ...

  8. 空格&amp;nbsp在不同浏览器中显示距离不一致问题解决方法

      在ie.firefox.chrome浏览器上显示的效果不太一样,主要是前面的空格宽度不同. 网上资料说不同的浏览器会有不同的默认字体.一般 IE默认字体都是宋体,而firefox和chrome的默 ...

  9. oracle用户管理入门

    1.创建一个新用户(普通) create user 用户名 identified by 密码 示例,创建一个名叫小明的用户,密码为xm 2.以管理员的身份给普通用户修改密码(当普通用户忘掉自己的密码时 ...

  10. 关于Android NDK

    把解压后的ndk放在自己想放的位置 环境变量:ndk根目录添加到PATH=$PATH:<ndk-root-path> 使用NDK:在自己工作目录(可以是随意位置)下创建<Test&g ...