zznu-oj-2117 : 我已经在路上了(求函数的原函数的字符串)--【暴力模拟题,花式模拟题,String大法好】
2117 : 我已经在路上了
时间限制:1 Sec 内存限制:256 MiB
提交:39 答案正确:8
题目描述
spring是不折不扣的学霸,那可是机房考研中的头号选手,不吹不黑,spring出征,寸草不生
但是这个学霸从来不屑于写简单的东西,因为时间是可贵的,spring喜欢留给B站小姐姐。所以在计算数学求导的时候spring就想出来用编程来完成,这样岂不是美滋滋,正好符合spring高大上的气质
那么问题来了,基础的求导公式那么多,spring只是添加了少许几个原函数,分别为y=C,y=x,y=x^n,y=sinx,y=cosx,y=lnx,y=loga(x),y=e^x,,每次对一个原函数求导,但是学霸spring又觉得这样太简单,所以就决定可以在求导函数中加上常数(正整数,int范围),当然为了平衡难度,常数只能够在x前面,或者函数最前面这两个地方添加(如果两者为同一地点只能添加一次)。
输入
输入形式严格按照上面的函数形式,并且符合常规数学知识,其中C,n,a都是正整数的形式给出,均在int范围。
输出
输出按照样例实现,(拒绝杠精,不接受反驳)不用带有y'=,直接写出求导的结果,占一行。
样例输入
y=sin5x
y=e^2x
y=2log13(8x)
样例输出
5cos5x
2e^2x
2/ln13/x
注意:
1、严格分类讨论,共八种情况;可以使用string的find()函数来找到每种情况的特殊字符段,该函数自行百度参数及使用方法。
2、每种情况,注意拆分出常数项和x的系数项,用一个函数来实现这个反复的问题。
3、每种情况,每个细节都要考虑到,常数项为“1”是否删去,x的系数项为“1”是否删除,理清思路后也就16种情况。具体自己列下来,整理清楚。
4、特殊情况,y=x求导结果为1,y=1x^1等等18中特例!自行耐心构造!
5、不全面的样例:
y=sinx
y=sin200000x
y=100000sin200000x
y=2sinx y=cosx y=2000000cosx y=cos200000x
y=200000cos200000x y=lnx y=ln100000x y=1000000lnx y=100000ln100000x y=2log13(8x) y=200000log130000(10000x)
//特例需要约分,还需要注意系数a和n为1的地方
y=6ln6x y=ln6x
y=100000e^20000x y=10000000x y=1x y=x^ y=1x^ y=e^x y=10e^10x y=1x^1
y=123456789x^100000
建议AC后再看看题解:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#define ll long long
using namespace std;
#define N 100
ll get(char s[],ll beg){ //从下标beg的地方开始累乘出一个数值,不越界,找到不是数字的地方停下来
ll x=;
for(ll i=beg;i<(ll)strlen(s)&&s[i]>=''&&s[i]<='';i++){
x=x*+s[i]-'';
}
return x;
}
int main(){
char s[]; while(scanf("%*2s%s",s)!=EOF){ //在读取的时候跳过前两个字符(%*2c也阔以)
string st(s);
ll c,a,n,b; if(st.find("x^")!=-){ //cx^n求导-->(c*n)x^(n-1)
if(s[]>=''&&s[]<='')
c=get(s,);
else
c=;
ll x=st.find("^");
n=get(s,x+); if(c*n!=)printf("%lld",c*n);
cout<<"x";
if(n-==)printf("\n");
else printf("^%lld\n",n-);
} else if(st.find("sin")!=-){ //Csin(ax)求导
if(st[]>=''&&st[]<='')
c=get(s,);
else
c=;
ll x=st.find("n");
if(st[x+]=='x')
a=;
else
a=get(s,x+);
if(c*a!=)printf("%lld",c*a);
if(a==)
printf("%s%s\n","cos","x");
else
printf("%s%lld%s\n","cos",a,"x");
}
else if(st.find("cos")!=-){ //Ccos(ax)求导
if(st[]>=''&&st[]<='')
c=get(s,);
else
c=;
ll x=st.find("s");
if(st[x+]=='x')
a=;
else
a=get(s,x+); if(c*a==)
printf("-");
else
printf("-%lld",c*a);
if(a!=)
printf("%s%lld%s\n","sin",a,"x");
else
printf("%s\n","sinx"); }
else if(st.find("ln")!=-){ //cln(ax)求导 ==c/x
if(st[]>=''&&st[]<='')
c=get(s,);
else
c=;
ll x=st.find("n");
if(st[x+]=='x')
a=;
else
a=get(s,x+);
printf("%lld/",c); printf("x\n");
}
else if(st.find("log")!=-){ //nloga(bx)求导-->n/lna/x
if(st[]>=''&&st[]<='')
n=get(s,);
else
n=;
ll x=st.find("g");
a=get(s,x+);
x=st.find("(");
if(st[x+]=='x')
b=;
else
b=get(s,x+); printf("%lld/ln%lld/x\n",n,a);
}
else if(st.find("e^")!=-){ //y=ne^ax求导
if(st[]>=''&&st[]<='')
n=get(s,);
else
n=;
ll x=st.find("^");
if(st[x+]=='x')a=;
else
a=get(s,x+); if(a*n==)
printf("%s\n",s);
else{
printf("%llde^",a*n);
if(a==)
printf("x\n");
else
printf("%lldx\n",a);
}
}
else if(st.find("x")!=-){ //y=ax求导
if(st[]=='x')
printf("1\n");
else
printf("%lld\n",get(s,));
}
else
printf("0\n");
} return ;
}
(有注释,不懂留言即可)
zznu-oj-2117 : 我已经在路上了(求函数的原函数的字符串)--【暴力模拟题,花式模拟题,String大法好】的更多相关文章
- ZZNU - OJ - 2080 : A+B or A-B【暴力枚举】
2080 : A+B or A-B(点击左侧标题进入zznu原题页面) 时间限制:1 Sec 内存限制:0 MiB提交:8 答案正确:3 提交 状态 讨论区 题目描述 Give you three s ...
- 做fzu oj 1045 做减法学到的sprintf()函数
题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...
- poj 2117 Electricity【点双连通求删除点后最多的bcc数】
Electricity Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4727 Accepted: 1561 Descr ...
- (haut oj 1261 ) 地狱飞龙 利用不定积分求值
题目链接:http://218.28.220.249:50015/JudgeOnline/problem.php?id=1261 题目描述 最近clover迷上了皇室战争,他抽到了一种地狱飞龙,很开心 ...
- Light OJ 1296:Again Stone Game(SG函数打表找规律)
Alice and Bob are playing a stone game. Initially there are n piles of stones and each pile contains ...
- oj 1002题 (大数题)
#include <stdio.h> #include <string.h> int main(void) { int q,j,h,k,l; int d; ],s2[];//题 ...
- 九度oj 1437 To Fill or Not to Fill 2012年浙江大学计算机及软件工程研究生机试真题
题目1437:To Fill or Not to Fill 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1488 解决:345 题目描述: With highways availabl ...
- hdu 2117:Just a Numble(水题,模拟除法运算)
Just a Numble Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 九度OJ 1049:字符串去特定字符 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8499 解决:3860 题目描述: 输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果. 输入: 测试数据有多组,每组输入字符串s和 ...
随机推荐
- NVIDIA显卡电源不足
NVIDIA显卡 Ubuntu16.04安装驱动后出现问题:Unable to determine the device handle for GPUXXX 安装NVIDIA驱动后输入:nvidia- ...
- windows下进程与线程
windows下进程与线程 Windows是一个单用户多任务的操作系统,同一时间可有多个进程在执行.进程是应用程序的运行实例,可以理解为应用程序的一次动态执行:而线程是CPU调度的单位,是进程的一个执 ...
- 超级块,i节点,数据块,目录块,间接块
一.物理磁盘到文件系统 文件系统用来存储文件内容,文件属性,和目录,这些类型的数据如何存储在磁盘块上的呢?Unix/linux使用了一个简单的方法. 他将磁盘分为3个部分: 超级块,文件系统中第一个块 ...
- gcc/clang编译带pthread.h头文件的源码时需要的参数
今天敲了一个小程序,编译时出现错误:undefined reference pthread_create 原来由于pthread库不是Linux系统默认的库,连接时需要使用库libpthread.a, ...
- 4、1 IK分词器
我们在浏览器地址栏输入 http://127.0.0.1:9200/_analyze?analyzer=chinese&pretty=true&text=我是程序员 默认的中文分词是将 ...
- 多线程-Task、await/async
Task创建无返回值 Task是.netframwork4.0重新分装的多线程类.原因以前的多线程(thread threadpool)不好用.(.net framwork也是的发展的,现在的EF,刚 ...
- Hadoop学习(6)-HBASE的安装和命令行操作和java操作
使用HABSE之前,要先安装一个zookeeper 我以前写的有https://www.cnblogs.com/wpbing/p/11309761.html 先简单介绍一下HBASE HBASE是一个 ...
- 【C++札记】命名空间(namespace)
介绍 命名空间可以解决程序中的同名冲突,尤其大型项目多人开发中经常用到.比如我们使用C++的标准输出std::cout就使用了std命名空间. 使用作用域符:: #include <iostre ...
- [NOIP普及组2001]最大公约数和最小公倍数问题
目录 链接 博客链接 题目链接 题目内容 题目描述 格式 输入 输出 数据 样例 输入 输出 说明 题目名称:最大公约数和最小公倍数问题 来源:2001年NOIP普及组 链接 博客链接 CSDN 洛谷 ...
- 新浪sae对storage的文档进行读写操作
有的人喜欢将一些数据写在服务器的文件里面,并不喜欢存在mysql里,但新浪sae却不支持对本地文件进行操作. 不过sae拓展了一个storage的服务,可以将一些静态文件放在上面.本文不介绍文件的上传 ...