事实证明物竞笔记是个好东西,可惜没带,不然还能谎称自己会一点求导和微积分。

顺便在这里把比较经典的一些关于求导的东西记录一下:

常用函数求导:

\(C'=0,(x^n)'=nx^{n-1},(\log_ax)'=\frac 1{x\ln a}\)

\((\ln x)'=\frac 1x,(a^x)'=a^x\ln a,(e^x)'=e^x\)

\((\sin x)'=\cos x=\sin(x+\frac{\pi}2)\)

\((\cos x)'=-\sin x=-\cos(x+\frac{\pi}2)\)

\((\tan x)'=\frac 1{\cos^2x}\)

基本求导法则:

\((u\pm v)'=u'\pm v';(uv)'=u'v+uv'\)

\((\frac uv)'=\frac{u'v-uv'}{v^2};y=f[g(x)],y'=f'[g(x)]g'(x)\)


题目下方给了关于泰勒展开的内容,所以我们可以将三个函数转换成多项式形式,然后进行求解(下文中的多项式省略关于误差的那一部分)。

第一部分:

\[f(x)=\sin(ax+b)
\]
\[f'(x)=a\sin(ax+b+\frac{\pi}2)
\]
\[f''(x)=a^2\sin(ax+b+\pi)
\]
\[\dots\dots\dots
\]
\[f^{(n)}(x)=a^n\sin(ax+b+\frac{n\pi}{2})
\]
\[\therefore f(x)=\sum_{i=0}^n\frac{a^i\sin(ax_0+b)}{i!}(x-x_0)^i
\]

第二部分:

\[f(x)=e^{ax+b}
\]
\[f'(x)=ae^{ax+b}
\]
\[f''(x)=a^2e^{ax+b}
\]
\[\dots\dots\dots
\]
\[f^{(n)}(x)=a^ne^{ax+b}
\]
\[\therefore f(x)=\sum_{i=0}^n\frac{a^ie^{ax_0+b}}{i!}(x-x_0)^i
\]

第三部分:

\[f(x)=ax+b=a(x-x_0)+ax_0+b
\]

当 \(n=15,x_0=0.5\) 时,误差就已经非常可以接受了。

这样我们就可以将多项式合并了,直接使用 \(LCT\) 即可。

时间复杂度 \(O(n\log n)\)。

#include<bits/stdc++.h>
#define fa(x) lct[x].fa
#define fl(x) lct[x].fl
#define sn(x,i) lct[x].sn[i]
#define f(x,i) lct[x].f[i]
#define g(x,i) lct[x].g[i]
using namespace std;
const int N=1e5+5;
const double pi=acos(0.0);
struct node{
int sn[2],fa,fl;
double f[15],g[15];
}lct[N];int n,tp,st[N],m;
int check(int x){
return sn(fa(x),0)!=x&&sn(fa(x),1)!=x;
}int chksn(int x){
return sn(fa(x),1)==x;
}void push_up(int x){
for(int i=0;i<15;i++)
g(x,i)=g(sn(x,0),i)+g(sn(x,1),i)+f(x,i);
}void push_down(int x){
if(!x||!fl(x)) return;
fl(sn(x,0))^=1,fl(sn(x,1))^=1;
swap(sn(x,0),sn(x,1)),fl(x)=0;
}void rotate(int x){
int y=fa(x),z=fa(y),k=chksn(x);
if(!check(y)) sn(z,chksn(y))=x;
fa(x)=z,fa(y)=x,fa(sn(x,1-k))=y;
sn(y,k)=sn(x,1-k),sn(x,1-k)=y;
push_up(y);
}void splay(int x){
st[tp=1]=x;
for(int i=x;!check(i);i=fa(i)) st[++tp]=fa(i);
while(tp) push_down(st[tp--]);
while(!check(x)){
int y=fa(x),z=fa(y);
if(!check(y))
rotate(chksn(x)!=chksn(y)?x:y);
rotate(x);
}push_up(x);
}void access(int x){
for(int i=0;x;i=x,x=fa(x))
splay(x),sn(x,1)=i,push_up(x);
}void mk(int x){
access(x),splay(x),fl(x)^=1;
}void split(int x,int y){
mk(x),access(y),splay(y);
}void cut(int x,int y){
split(x,y),fa(x)=sn(y,0)=0;
}void link(int x,int y){
mk(x),access(y),fa(x)=y;
}int find(int x){
access(x),splay(x);
while(sn(x,0)) x=sn(x,0);
return x;
}void chg(int x,int fg,double a,double b){
double ac=1,jc=1;
for(int i=0;i<15;i++,ac*=a,jc*=i){
if(fg==3) f(x,i)=i>0?(i<2?a:0):a*0.5+b;
else if(fg==2) f(x,i)=ac*exp(a*0.5+b)/jc;
else f(x,i)=ac*sin(a*0.5+b+i*pi)/jc;
}
}int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
string s;cin>>n>>m>>s;
for(int i=1;i<=n;i++){
int fg;double a,b;
cin>>fg>>a>>b,chg(i,fg,a,b);
}while(m--){
cin>>s;
if(s=="appear"){
int u,v;cin>>u>>v;
link(u+1,v+1);
}if(s=="travel"){
int u,v;double x;
cin>>u>>v>>x;
if(find(++u)!=find(++v)){
cout<<"unreachable\n";
continue;
}split(u,v);double jc=1,sum=0;
for(int i=0;i<15;i++)
sum+=jc*g(v,i),jc*=x-0.5;
cout<<fixed<<setprecision(8)<<scientific<<sum<<"\n";
}if(s=="magic"){
int c,fg;double a,b;
cin>>c>>fg>>a>>b;
mk(++c),chg(c,fg,a,b);
}if(s=="disappear"){
int u,v;cin>>u>>v;
cut(u+1,v+1);
}
}return 0;
}

[THUWC2017] 在美妙的数学王国中畅游 题解(内附求导小技巧)的更多相关文章

  1. [THUWC2017]在美妙的数学王国中畅游

    [THUWC2017]在美妙的数学王国中畅游 e和sin信息不能直接合并 泰勒展开,大于21次太小,认为是0,保留前21次多项式即可 然后就把e,sin ,kx+b都变成多项式了,pushup合并 上 ...

  2. [BZOJ5020][THUWC2017]在美妙的数学王国中畅游(LCT)

    5020: [THUWC 2017]在美妙的数学王国中畅游 Time Limit: 80 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 323  ...

  3. [THUWC2017]在美妙的数学王国中畅游 LCT+泰勒展开+求导

    p.s. 复合函数求导时千万不能先带值,再求导. 一定要先将符合函数按照求导的规则展开,再带值. 设 $f(x)=g(h(x))$,则对 $f(x)$ 求导: $f'(x)=h'(x)g'(h(x)) ...

  4. 题解 洛谷 P4546 【[THUWC2017]在美妙的数学王国中畅游】

    首先发现有连边和删边的操作,所以我们肯定要用\(LCT\)来进行维护. 接下来考虑如何进行\(LCT\)上的信息合并. \(f=1\),则函数为\(f(x)=sin(ax+b)\) \(f=2\),则 ...

  5. Luogu4546 THUWC2017 在美妙的数学王国中畅游 LCT、泰勒展开

    传送门 题意:反正就是一堆操作 LCT总是和玄学东西放在一起我们不妨令$x_0=0.5$(其实取什么都是一样的,但是最好取在$[0,1]$的范围内),将其代入给出的式子,我们得到的$f(x)$的式子就 ...

  6. [LOJ2289][THUWC2017]在美妙的数学王国中畅游:Link-Cut Tree+泰勒展开

    分析 又有毒瘤出题人把数学题出在树上了. 根据泰勒展开,有: \[e^x=1+\frac{1}{1!}x+\frac{1}{2!}x^2+\frac{1}{3!}x^3+...\] \[sin(x)= ...

  7. Luogu P4546 [THUWC2017]在美妙的数学王国中畅游

    题意 题意奇奇怪怪,这里就不写了. \(\texttt{Data Range:}1\leq n\leq 10^5,1\leq m\leq 2\times 10^5\) 题解 为什么你们都是卡在数学方面 ...

  8. 洛谷P4546 [THUWC2017]在美妙的数学王国中畅游 [LCT,泰勒展开]

    传送门 毒瘤出题人卡精度-- 思路 看到森林里加边删边,容易想到LCT. 然而LCT上似乎很难实现往一条链里代一个数进去求和,怎么办呢? 善良的出题人在下方给了提示:把奇怪的函数泰勒展开搞成多项式,就 ...

  9. P4546 [THUWC2017]在美妙的数学王国中畅游

    如果只有第3个操作,那么这就是个sd题,随便lct搞搞就过去了 然后就是一个神仙东西 taylor公式 我不会,看gsy博客https://www.cnblogs.com/zhoushuyu/p/81 ...

  10. BZOJ5020 THUWC2017在美妙的数学王国中畅游(LCT)

    明摆着的LCT,问题在于如何维护答案.首先注意到给出的泰勒展开式,并且所给函数求导非常方便,肯定要用上这玩意.容易想到展开好多次达到精度要求后忽略余项.因为x∈[0,1]而精度又与|x-x0|有关,当 ...

随机推荐

  1. uni-app 主题切换

    1.前言 功能介绍:提供个性化的展示方案给用户,用户可以选择喜欢的主题色,让App使用该主题色进行渲染 功能实现:主要分为2个模块,一,选择主题色并存储,二,读取选择的主题色,使用该颜色对部分内容进行 ...

  2. Yacc笔记

    语义动是一个C语句的序列 $$ 表是和相应产生式头的非终结符号关联的属性值 $i  表示和相应产生式体中第 i 个文法符号(终结符或非终结符号)关联的属性值 按照产生式规约时会执行关联的语义动作 对于 ...

  3. Java 动态设置 JVM 参数的方法

    Java虚拟机(JVM)在运行Java应用时,其性能调优和资源管理至关重要.虽然许多JVM参数在启动时通过命令行设置,但在应用运行期间动态调整某些参数也是可行的.通过动态设置JVM参数,开发者可以更有 ...

  4. 六步取消win11开机PIN密码登录

    0.前言 新买的电脑打开后首先要进行一系列的操作激活操作系统.在这些操作中最令人讨厌的是设置开机密码(pin). 也许有很多人的电脑需要保密,限制别人登录,这时使用登录pin是很有必要的.而还有很多人 ...

  5. 一款基于 .NET MVC 框架开发、功能全面的MES系统

    前言 今天大姚给大家分享一款基于 .NET MVC 框架开发.功能全面的离散型零部件制造管理系统(MES):EasyMES. 项目介绍 EasyMES一款基于 .NET 6 MVC 框架开发.开源免费 ...

  6. git gitignore文件不生效

    配置了 .gitigore 文件不生效,是刚开始将那些过滤的文件加到了版本控制.后续增加的,没有进入到版本控制 解决办法就是从版本控制移除,重新更新下gitignore文件 执行以下命令: 根据情况自 ...

  7. CSS 面试题

    CSS3有哪些新能特性? 新增特性: 圆角border-radius 阴影 box-shadow 文字特效 text-shadow 线性渐变 gradient 变形 transform 增加了css选 ...

  8. 【XML】Java创建XML文档

    package example01; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers ...

  9. Go语言实现国密证书加密与解析技术详解

    Go语言实现国密证书加密与解析技术详解 前言 在当今数字化时代,信息安全成为企业和个人关注的焦点.国密算法作为中国自主研发的加密标准,广泛应用于各类安全场景.Go语言以其简洁.高效的特性,成为众多开发 ...

  10. 开源产品测评之 SQL 上线能力

    背景 近期,我司准备引入一款 SQL 审核产品来供内部流程使用,解决目前 SQL 人工上线的流程管控问题,目标是对业内的开源产品进行调研,选型一款作为落地方案,后期如果内部有需求可能会进行二次开发.我 ...