【JZOJ4803】【NOIP2016提高A组模拟9.28】求导
2016-09-29 15:58
295 查看
题目描述
输入
输出
样例输入
2x^2+3x+1样例输出
4x+3数据范围
样例解释
求导的意思:多项式是由若干个单项式构成的
单项式的一般形式是ax^b,其中ab都是常数,x是自变量
对于单项式ax^b求导,结果就是(ab)x^(b-1)
对于多项式求导,就是把构成它的所有单项式分别求导之后相加
特别地,对于ax^0,即对常数a求导,结果是0
解法
模拟即可;注意细节:
1.系数可为负;
2.处理+-号
3.当系数为1时,系数省略;
4.特别地:输入2+2x^2,输出2x。
代码
#include<iostream> #include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #define ll long long #define ln(x,y) ll(log(x)/log(y)) #define sqr(x) ((x)*(x)) using namespace std; const char* fin="equation.in"; const char* fout="equation.out"; const ll inf=0x7fffffff; const ll maxn=1007; char a[maxn],ch; bool bz=false,cz=false; void poke(){ ll i=1,j=0,k=0; if (ch=='-') i=-1; ch=getchar(); if (ch=='-') i=-1; while (ch>='0' && ch<='9') k=k*10+ch-'0',ch=getchar(); if (ch!='x') { if (ch=='+') bz=true; return; } if (k==0) k=1; ch=getchar(); if (ch!='^'){ if (bz) printf("+"),bz=false; k=i*k; printf("%lld",k); if (ch=='+') bz=true; cz=true; return; } ch=getchar(); while (ch>='0' && ch<='9') j=j*10+ch-'0',ch=getchar(); k*=j*i; j--; if (bz) { if (cz) printf("+"); bz=false; } printf("%lldx",k); if (j>1) printf("^%lld",j); if (ch=='+') bz=true; cz=true; } int main(){ freopen(fin,"r",stdin); freopen(fout,"w",stdout); while (1){ poke(); if (ch!='+' && ch!='-') break; } if (!cz) printf("0"); return 0; }
启发
多出特殊的数据,多考虑细节。像这种模拟题看起来简单,但细节不可忽视。
相关文章推荐
- 【NOIP2016提高A组模拟9.28】求导
- NOIP2016提高A组模拟9.28总结
- 【JZOJ4804】【NOIP2016提高A组模拟9.28】成绩调研
- 【JZOJ4805】【NOIP2016提高A组模拟9.28】跟踪
- 锦标赛【NOIP2016提高A组模拟7.17】
- 弄提纲【NOIP2016提高A组模拟7.19】
- Graph Coloring【NOIP2016提高A组模拟7.20】
- 数列编辑器 【NOIP2016提高A组模拟9.14】
- 【JZOJ4791】【NOIP2016提高A组模拟9.21】矩阵
- JZOJ 4798 【NOIP2016提高A组模拟9.24】天使的分裂
- 【NOIP2016提高A组模拟8.23】函数
- JZOJ 4693 疯狂的火神【NOIP2016提高A组模拟8.14】
- JZOJ 100023 【NOIP2016提高A组模拟7.6】塔
- Password【NOIP2016提高A组模拟8.15】
- JZOJ 4711. 【NOIP2016提高A组模拟8.17】Binary
- 【NOIP2016提高A组模拟8.17】Matrix
- 【NOIP2016提高A组模拟10.15】最大化
- 【NOIP2016提高A组模拟7.15】立方体
- 【JZOJ4744】【NOIP2016提高A组模拟9.2】同余
- 【JZOJ4715】【NOIP2016提高A组模拟8.19】树上路径