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和 ...
随机推荐
- Vue3 相比 vue2
Vue3 使用Proxy替代了defineProperty. Proxy 相比于 defineProperty 的优势 Object.defineProperty() 的问题主要有三个: 不能监听数组 ...
- 如何创建一个线程安全的Map?
1,使用普通的旧的Hashtable HashMap允许null作为key,而Hashtable不可以 2,使用Collections中同步化的包装方法synchronizedMap 3,使用conc ...
- Java线程安全队列Queue实现原理
原文链接:https://www.cnblogs.com/DreamRecorder/p/9223016.html 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.J ...
- quartz 简单定时器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- 在VMware Workstation10下CentOS7虚拟机中创建与主机共享文件夹的详细步骤
一.前言 在使用虚拟机时,常常需要与宿主计算机(以下简称为主机)操作系统交换文件,为此需要在虚拟机与主机之间建立共享文件夹. 二. 安装VMTools 要使用共享文件机制,必须首先安装VMTools. ...
- json字符串,json对象,java对象互相转换
1.把JSON字符串转换为JAVA 对象 JSONObject jsonobject = JSONObject.fromObject(jsonStr); User user= (User)JSONOb ...
- Pod——状态和生命周期管理及探针和资源限制
一.什么是Podkubernetes中的一切都可以理解为是一种资源对象,pod,rc,service,都可以理解是 一种资源对象.pod的组成示意图如下,由一个叫”pause“的根容器,加上一个或多个 ...
- C# EntityCollection 和 List 互转
private EntityCollection<T> ToEntityCollection<T>(this List<T> list) where T : cla ...
- 给初学PHP的学习线路和建议
直入主题 1.熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作简单的网页,对元素属性相对熟悉. 2.理解动态语言的概念和运做机制,熟悉基本的PHP语法. 3.学习如何将PHP与HTML结 ...
- 13-MySQL DBA笔记-迁移、升级、备份、恢复数据库
第13章 迁移.升级.备份.恢复数据库本章将为读者讲述数据库的各种维护任务:迁移.升级.备份和恢复.因为每个人熟悉的工具不同,其对应的迁移.升级.备份和恢复的方式也都略有不同,本书将尽量对笔者认为最具 ...