首页 > 其他分享 >[THUWC2017] 在美妙的数学王国中畅游 题解(内附求导小技巧)

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

时间:2025-01-09 09:49:07浏览次数:1  
标签:lct frac int 题解 内附 ax THUWC2017 pi sin

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

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

常用函数求导:
\(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;
}

标签:lct,frac,int,题解,内附,ax,THUWC2017,pi,sin
From: https://www.cnblogs.com/chang-an-22-lyh/p/18661051/thuwc2017-zai_mei_miao_de_shu_xue_wang_

相关文章

  • [THUWC2017] 在美妙的数学王国中畅游 题解(内附求导小技巧)
    事实证明物竞笔记是个好东西,可惜没带,不然还能谎称自己会一点求导和微积分。顺便在这里把比较经典的一些关于求导的东西记录一下:常用函数求导:\(C'=0,(x^n)'=nx^{n-1},(\log_ax)'=\frac1{x\lna}\)\((\lnx)'=\frac1x,(a^x)'=a^x\lna,(e^x)'=e^x\)\((\sinx)'=\cosx=\sin(......
  • HTML+CSS+JS制作中华传统文化主题网站(内附源码,含5个页面)
    一、作品介绍HTML+CSS+JS制作一个中华传统文化主题网站,包含首页、文化艺术页、传统工艺页、文化遗产页、关于我们页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。二、页面结构1.顶部导航区包含网站Logo、主导航菜单(首页、文化分类、活动......
  • HTML+CSS+JS制作中华传统美食主题网站(内附源码,含5个页面)
    一、作品介绍HTML+CSS+JS制作一个中华传统文化主题网站,包含首页、菜系页、食材页、名厨页、美食故事页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。二、页面结构1.顶部横幅导航区包含网站Logo、搜索栏、主导航菜单(首页、菜系分类、美食故......
  • Luogu P2292 HNOI2004 L 语言 题解 [ 紫 ] [ AC 自动机 ] [ 状压 dp ]
    L语言:很好的一道状压dp题。思路看到这题,首先可以想到一个很暴力的dp,设\(dp_i\)表示考虑到第\(i\)位能否被理解,暴力匹配字符串转移即可。第一个优化也很显然,暴力匹配字符串换成AC自动机即可。但是时间复杂度变成了\(O(m|T||S|)\)的,显然会被卡。状压与位运算优化......
  • 洛谷 P2754 [CTSC1999] 家园 / 星际转移问题——题解
    #ifdefONLINE_JUDGE#else#defineQiu_Cheng#endif#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;//typedeflonglongll;constintN=2e6+5,mod=1e9+7,inf=INT_MAX;//constintmod1=469762049,mod2=998244353,mod3=1004535......
  • P7603 [THUPC2021] 鬼街 题解
    P7603[THUPC2021]鬼街题解第一次见折半报警器的trick,记录一下首先观察到\(x\len\le10^5\),所以\(x\)最多有6个质因数,\(x=30030\)可以取到,这使得对于修改,我们可以暴力单点修改。接下来考虑询问,朴素的做法是:每一次灵异事件之后,都对所有监控器进行检验是否满足和......
  • 洛谷 P1550 [USACO08OCT] Watering Hole G 题解
     由于无法提交题解所以来csdn蹭个位置  题目链接  这道题我的思路就是用并查集(推荐先学习:并查集(B站视频))将所有农场连接成n个(几个都不重要)连通块,用一个优先队列(由于作者没找视频所以不放链接了sorry)记录x农场连接y农场的最小价格。  有个值......
  • vue3项目yarn install遇到的info There appears to be trouble with your network con
    新接手的vue3项目在安装依赖的时候经常下载失败,报错Couldn'tfindpackage...onthe"npm"registry或者errorError:readECONNRESET1.可以改变当前的源查看当前使用的源yarnconfiggetregistry改变源yarnconfigsetregistryhttps://registry.npmmirror.com(推荐......
  • [WC2006] 水管局长 题解
    最大值最小的路径肯定在最小生成树上,考虑用\(LCT\)维护最小生成树,只需要维护长度最长的边即可实现。由于\(LCT\)维护最小生成树不支持删边,所以采用倒序加边的方式处理。时间复杂度\(O(n\logn)\)。#include<bits/stdc++.h>#definefa(x)lct[x].fa#definefl(x)lct[x].f......
  • [Ynoi2016] 镜中的昆虫 题解
    [Ynoi2016]镜中的昆虫题解好题值得一做。题目大意:给一个序列,有若干个离线询问,每次可以区间推平或询问区间内的颜色个数,数据范围是\(10^5\)级别。解题思路:我们可以先考虑一个弱化版,每次是单点修改怎么做,类似于CF848C。我们考虑维护出每一个位置上一个与它相等的位置是\(p......