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


    如果只有第3个操作,那么这就是个sd题,随便lct搞搞就过去了

    然后就是一个神仙东西 taylor公式

    我不会,看gsy博客https://www.cnblogs.com/zhoushuyu/p/8148732.html

    #include<bits/stdc++.h>
    #define il inline
    #define vd void
    typedef long long ll;
    #define maxn 100010
    #define k 16
    il int gi(){
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){
            if(ch=='-')f=-1;
            ch=getchar();
        }
        while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
        return x*f;
    }
    int F[maxn];double A[maxn],B[maxn];
    int ch[maxn][2],fa[maxn];
    double f[maxn][k];
    bool rev[maxn];
    il bool isrt(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}
    il vd Rev(int x){if(x)rev[x]^=1,std::swap(ch[x][0],ch[x][1]);}
    il vd down(int x){
        if(!isrt(x))down(fa[x]);
        if(rev[x])Rev(ch[x][0]),Rev(ch[x][1]),rev[x]=0;
    }
    il vd upd(int x){
        for(int i=0;i<16;++i)f[x][i]=f[ch[x][0]][i]+f[ch[x][1]][i];
        if(F[x]==1){
            double val=1,Sin=sin(B[x]),Cos=cos(B[x]);
            for(int i=0;i<k;i+=4){
                f[x][i]+=Sin*val,val*=A[x];
                f[x][i+1]+=Cos*val,val*=A[x];
                f[x][i+2]-=Sin*val,val*=A[x];
                f[x][i+3]-=Cos*val,val*=A[x];
            }
        }else if(F[x]==2){
            double val=exp(B[x]);
            for(int i=0;i<k;++i)f[x][i]+=val,val*=A[x];
        }else f[x][0]+=B[x],f[x][1]+=A[x];
    }
    il vd rotate(int x){
        int y=fa[x],z=fa[y],o=ch[y][1]==x;
        fa[x]=z;if(!isrt(y))ch[z][y==ch[z][1]]=x;
        ch[y][o]=ch[x][!o];fa[ch[x][!o]]=y;
        ch[x][!o]=y,fa[y]=x;
        upd(y);
    }
    il vd splay(int x){
        down(x);
        for(int y=fa[x],z=fa[y];!isrt(x);rotate(x),y=fa[x],z=fa[y])
            if(!isrt(y))rotate(((ch[y][1]==x)==(ch[z][1]==y))?y:x);
        upd(x);
    }
    il vd access(int x){for(int y=0;x;x=fa[y=x])splay(x),ch[x][1]=y,upd(x);}
    il vd makert(int x){access(x),splay(x),Rev(x);}
    il vd link(int x,int y){makert(x),fa[x]=y;}
    il vd cut(int x,int y){makert(x),access(y),splay(y),ch[y][0]=fa[x]=0,upd(y);}
    il int find(int x){access(x);splay(x);while(ch[x][0])x=ch[x][0];return x;}
    double p[k];
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("4546.in","r",stdin);
        freopen("4546.out","w",stdout);
    #endif
        p[0]=1;for(int i=1;i<k;++i)p[i]=p[i-1]*i;
        int n=gi(),m=gi();scanf("%*s");
        for(int i=1;i<=n;++i)F[i]=gi(),scanf("%lf%lf",&A[i],&B[i]),upd(i);
        char opt[10];
        int u,v;
        while(m--){
            scanf("%s",opt);
            if(opt[0]=='a')u=gi(),v=gi(),link(u+1,v+1);
            else if(opt[0]=='d')u=gi(),v=gi(),cut(u+1,v+1);
            else if(opt[0]=='m')u=gi()+1,makert(u),F[u]=gi(),scanf("%lf%lf",&A[u],&B[u]),upd(u);
            else{
                u=gi()+1,v=gi()+1;
                double X,ans=0,pX;scanf("%lf",&X);pX=1;
                if(find(u)!=find(v)){puts("unreachable");continue;}
                makert(u),access(v),splay(v);
                for(int i=0;i<k;++i)ans+=f[v][i]*pX/p[i],pX*=X;
                printf("%.8e
    ",ans);
            }
        }
        return 0;
    }
    

    虽然我不会,但我在BZOJ上的时间吊打了gsy

  • 相关阅读:
    Install Java on Ubuntu server
    Java 空引用访问静态不会发生空指针异常
    Java 什么时候使用static
    Java 空指针异常
    java 方法的返回值
    python中直接复制,浅拷贝,深拷贝
    python 操作ppt转换为pdf
    数组排序
    qooxdoo框架环境搭建
    python 链表实现 双向链表和单向循环链表
  • 原文地址:https://www.cnblogs.com/xzz_233/p/9973602.html
Copyright © 2020-2023  润新知