您的位置:首页 > 其它

【NOIP模拟】求导

2016-09-29 17:25 351 查看

Description



Solution

看到这个简单的求导,哇!感觉好水啊!对于那些不会求导的人来说,那简直就是不可做。

然后下面尽然给了求导公式。

哎,不就是模拟吗……

这个分类讨论,简直是烦死人!!!!

我原以为指数是从小到大的,然后不是,结果GG了。

我认为比较简单的处理方法就是,把所有的数字符号,先从字符串提取出来,然后再处理会比较方便。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
long long i,j,k,l,t,n,m,ans,zhi,f,tt,ff,jia,op;
char s[100000];
long long sum[1010][2],fu[1001];
bool az,bz;
int main(){
freopen("equation.in","r",stdin);
freopen("equation.out","w",stdout);
scanf("%s",s+1);
n=strlen(s+1);
s[++n]='+';
f=1;fo(i,1,1000)fu[i]=1;op=1;
fo(i,1,n){
if(!az&&s[i]>='0'&&s[i]<='9')t=t*10+s[i]-'0';
else if(s[i]=='+'||(s[i]=='-'&&bz)){
if(bz)t=max(t,(long long)1),tt=max(tt,(long long)1);
op++;
sum[op][0]=t;sum[op][1]=tt;//if(s[i]=='-')fu[op]=-1;
fu[op]=f;
t=0;
tt=0,az=bz=0;
if(s[i]=='+')f=1;else f=-1;
}
else if(s[i]=='^')az=1;
else if(az){
tt=tt*10+s[i]-'0';
}
else if(s[i]=='x'){bz=1;if(!t)t=1;}
else if(s[i]=='-')f=-1;
}
if(s[1]=='-')fu[1]=-1;
fo(i,2,op){
if(sum[i][1]){
if(ans){if(i!=1)if(fu[i]==1)putchar('+');}
printf("%lld",fu[i]*sum[i][0]*sum[i][1]);
if(sum[i][1]>1)putchar('x');
if(sum[i][1]>2)printf("^%lld",sum[i][1]-1);
ans++;
}
}
if(!ans)printf("0");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: