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

e和sin信息不能直接合并

泰勒展开,大于21次太小,认为是0,保留前21次多项式即可

然后就把e,sin ,kx+b都变成多项式了,pushup合并

上LCT

// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define ld double
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');}
template<class T>il void ot(T x){if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}namespace Miracle{
const int N=1e5+5;
const int K=22;
int n,m;
struct Poly{ld a[K];Poly(){memset(a,0,sizeof a);}il ld &operator[](const int &x){return a[x];}il const ld &operator[](const int &x) const {return a[x];}Poly friend operator +(const Poly &a,const Poly &b){Poly c;for(reg i=0;i<K;++i){c.a[i]=a.a[i]+b.a[i];}return c;}ld calc(ld x){ld tmp=1,ret=0;for(reg i=0;i<K;++i){ret=ret+a[i]*tmp;tmp=tmp*x;    }return ret;}
};
int C[30][30];
ld jie[K],ma[K],mb[K];
Poly exp(double a,double b){Poly ret;ma[0]=1;mb[0]=1;for(reg i=1;i<K;++i){ma[i]=ma[i-1]*a;mb[i]=mb[i-1]*b;}for(reg i=0;i<K;++i){for(reg j=0;j<=i;++j){ret.a[j]+=C[i][j]*ma[j]*mb[i-j]*jie[i];}}return ret;
}
Poly sin(double a,double b){Poly ret;ma[0]=1;mb[0]=1;for(reg i=1;i<K;++i){ma[i]=ma[i-1]*a;mb[i]=mb[i-1]*b;}for(reg i=1;i<K;i+=2){for(reg j=0;j<=i;++j){if(((i-1)/2)&1){ret.a[j]-=C[i][j]*ma[j]*mb[i-j]*jie[i];}else{ret.a[j]+=C[i][j]*ma[j]*mb[i-j]*jie[i];}}}    return ret;
}
Poly init(int typ,double a,double b){if(typ==1) return sin(a,b);if(typ==2) return exp(a,b);Poly ret;ret.a[1]=a;ret.a[0]=b;return ret;
}
struct node{int ch[2],fa;int rev;Poly f,sum;
}t[N];
#define ls t[x].ch[0]
#define rs t[x].ch[1]
void pushup(int x){if(!x) return; t[x].sum=t[ls].sum+t[rs].sum+t[x].f;
}
bool nrt(int x){return t[t[x].fa].ch[0]==x||t[t[x].fa].ch[1]==x;
}
void rev(int x){t[x].rev^=1;swap(ls,rs);
}
void pushdown(int x){if(t[x].rev){rev(ls);rev(rs);t[x].rev=0;}
}
void rotate(int x){int y=t[x].fa,d=t[y].ch[1]==x;t[t[y].ch[d]=t[x].ch[!d]].fa=y;if(nrt(y)) t[t[x].fa=t[y].fa].ch[t[t[y].fa].ch[1]==y]=x;else t[x].fa=t[y].fa;t[t[x].ch[!d]=y].fa=x;pushup(y);
}
int sta[N];
void splay(int x){int y=x,z=0;sta[++z]=x;while(nrt(y)) y=t[y].fa,sta[++z]=y;while(z) pushdown(sta[z--]);while(nrt(x)){y=t[x].fa,z=t[y].fa;if(nrt(y)){rotate((t[y].ch[0]==x)==(t[z].ch[0]==y)?y:x);}rotate(x);}pushup(x);
}
void access(int x){for(reg y=0;x;y=x,x=t[x].fa){splay(x);t[x].ch[1]=y;pushup(x);}
}
void makert(int x){access(x);splay(x);rev(x);
}
void link(int x,int y){makert(x);t[x].fa=y;
}
void split(int x,int y){makert(x);access(y);splay(y);
}
void cut(int x,int y){split(x,y);t[y].ch[0]=t[x].fa=0;pushup(y);
}
int findrt(int x){access(x);splay(x);while(ls) x=ls;splay(x);return x;
}
ld query(int x,int y,ld v){split(x,y);return t[y].sum.calc(v);
}
char s[233];
int main(){char haha[233];rd(n);rd(m);scanf("%s",haha+1);int typ;ld a,b;int x,y;C[0][0]=1;for(reg i=1;i<=K;++i){C[i][0]=1;for(reg j=1;j<=K;++j){C[i][j]=C[i-1][j]+C[i-1][j-1];}}jie[0]=jie[1]=1;for(reg i=2;i<=K;++i){jie[i]=jie[i-1]/i;}for(reg i=1;i<=n;++i){rd(typ);scanf("%lf%lf",&a,&b);t[i].f=init(typ,a,b);pushup(i);}while(m--){scanf("%s",s+1);if(s[1]=='a'){rd(x);rd(y);++x;++y;link(x,y);}else if(s[1]=='d'){rd(x);rd(y);++x;++y;cut(x,y);}else if(s[1]=='m'){rd(x);rd(typ);scanf("%lf%lf",&a,&b);++x;access(x);splay(x);t[x].f=init(typ,a,b);pushup(x);}else {
//            cout<<" tr "<<endl;rd(x);rd(y);scanf("%lf",&a);++x;++y;
//            cout<<x<<" "<<y<<" a "<<a<<endl;if(findrt(x)==findrt(y)) printf("%.10lf\n",query(x,y,a));else puts("unreachable");}}return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*Date: 2019/4/11 20:11:40
*/

多项式可以支持合并

转载于:https://www.cnblogs.com/Miracevin/p/10693775.html

[THUWC2017]在美妙的数学王国中畅游相关推荐

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

    [THUWC2017]在美妙的数学王国中畅游 LCT+泰勒展开+求导 Code: #include<bits/stdc++.h> using namespace std; #define ...

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

    $ \color{#0066ff}{ 题目描述 }$ 学渣小R被大学的数学课程虐得生活不能自理,微积分的成绩曾是他在教室里上的课的最低分.然而他的某位陈姓室友却能轻松地在数学考试中得到满分.为了提升自 ...

  3. THUWC2017 在美妙的数学王国中畅游

    题目链接 这个提示貌似没有什么用. 学过泰勒展开就会了.没学过可能不太行. 第一第二个操作就是\(LCT\)板子. 第三个就在\(LCT\)上改改就好了. 第四个好像很麻烦的样子. 首先,我们要知道它 ...

  4. BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游

    BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游 其实题面好像有点不全,建议去洛谷: P4546 [THUWC2017]在美妙的数学王国中畅游 这里还是$BZOJ$的题面. Desc ...

  5. 【BZOJ5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT

    [BZOJ5020][THUWC 2017]在美妙的数学王国中畅游 Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数 ...

  6. 【BZOJ5020】【THUWC2017】在美妙的数学王国中畅游(Link-Cut Tree,组合数学)

    题解 Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言: "学好 ...

  7. BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)

    Description 数字和数学规律主宰着这个世界.   机器的运转,   生命的消长,   宇宙的进程,   这些神秘而又美妙的过程无不可以用数学的语言展现出来.   这印证了一句古老的名言:   ...

  8. [BZOJ5020] [THUWC 2017]在美妙的数学王国中畅游

    Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言: "学好数理化 ...

  9. 【bzoj5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT

    题目描述 学渣小R被大学的数学课程虐得生活不能自理,微积分的成绩曾是他在教室里上的课的最低分.然而他的某位陈姓室友却能轻松地在数学考试中得到满分.为了提升自己的数学课成绩,有一天晚上(在他睡觉的时候) ...

最新文章

  1. java 句子拆分_java – 将段落拆分为单个句子.我在这里覆盖了所有的基地吗?
  2. web入门+书籍推荐
  3. OpenCV类型转换
  4. 从移动端开发者的角度聊微软的困境和机会
  5. Java面试中与源码有关的问题分享
  6. java中怎么找类的路径_Java中获取类加载路径和项目根路径的5种方法
  7. 广东东软学院计算机系主任罗,广东东软学院副校长朱爱红一行来访我校
  8. Java 8 Friday Goodies:Lambda和SQL
  9. 【POJ - 3616】Milking Time (贪心+dp)
  10. linux里的vmware16有中文吗,vmware 16.1专业版_linux版本下载_vmware 16.1下载_5分享
  11. maven打包忽略注解_maven打包后pom.properties中的注释问题-阿里云开发者社区
  12. 学Web前端开发需要哪些基础?零基础小白该怎么入行?
  13. Spring Boot 2.2 正式发布,大幅性能提升 Java 13 支持 | CSDN 博文精选
  14. 对break和continue的一些个人认知(称不上见解)
  15. matlab用正弦做随机信号程序,实验二随机信号的仿真与分析.doc
  16. matlab 作图设置线宽,改matlab的绘图大小、字号、线宽
  17. 【GPL和LGPL】【VPlayer不开源】【其他开源的基本都仅是ffmpeg修改部分】
  18. 几款强力压缩打包软件
  19. 编程求x的n次方_用C语言程序设计:求x的n次方的函数。
  20. Python基础知识-pycharm版-02

热门文章

  1. JAVA学习--反射属性操作
  2. Scrapy 爬虫实例 抓取豆瓣小组信息并保存到mongodb中
  3. js中对变量初始化的重要性
  4. Oracle获取LOB长度的两种方法效率对比
  5. 打造属于自己的图文符号库
  6. Solaris10下NDOUtils的安装
  7. Android 常见adb命令
  8. PHP环境搭建:Windows 7下安装配置PHP+Apache+Mysql环境教程(转)
  9. 计算机的几种类型单词、快捷键
  10. ExecutorService(任务调度器)详解