[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=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) 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+;
const int K=;
int n,m;
struct Poly{
ld a[K];
Poly(){memset(a,,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=;i<K;++i){
c.a[i]=a.a[i]+b.a[i];
}
return c;
}
ld calc(ld x){
ld tmp=,ret=;
for(reg i=;i<K;++i){
ret=ret+a[i]*tmp;
tmp=tmp*x;
}
return ret;
}
};
int C[][];
ld jie[K],ma[K],mb[K];
Poly exp(double a,double b){
Poly ret;
ma[]=;mb[]=;
for(reg i=;i<K;++i){
ma[i]=ma[i-]*a;
mb[i]=mb[i-]*b;
}
for(reg i=;i<K;++i){
for(reg j=;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[]=;mb[]=;
for(reg i=;i<K;++i){
ma[i]=ma[i-]*a;
mb[i]=mb[i-]*b;
}
for(reg i=;i<K;i+=){
for(reg j=;j<=i;++j){
if(((i-)/)&){
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==) return sin(a,b);
if(typ==) return exp(a,b);
Poly ret;
ret.a[]=a;
ret.a[]=b;
return ret;
}
struct node{
int ch[],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[]==x||t[t[x].fa].ch[]==x;
}
void rev(int x){
t[x].rev^=;
swap(ls,rs);
}
void pushdown(int x){
if(t[x].rev){
rev(ls);rev(rs);
t[x].rev=;
}
}
void rotate(int x){
int y=t[x].fa,d=t[y].ch[]==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[]==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=;
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[]==x)==(t[z].ch[]==y)?y:x);
}
rotate(x);
}
pushup(x);
}
void access(int x){
for(reg y=;x;y=x,x=t[x].fa){
splay(x);t[x].ch[]=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[]=t[x].fa=;
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[];
int main(){
char haha[];
rd(n);rd(m);scanf("%s",haha+); int typ;
ld a,b;
int x,y;
C[][]=;
for(reg i=;i<=K;++i){
C[i][]=;
for(reg j=;j<=K;++j){
C[i][j]=C[i-][j]+C[i-][j-];
}
}
jie[]=jie[]=;
for(reg i=;i<=K;++i){
jie[i]=jie[i-]/i;
}
for(reg i=;i<=n;++i){
rd(typ);scanf("%lf%lf",&a,&b);
t[i].f=init(typ,a,b);
pushup(i);
}
while(m--){
scanf("%s",s+);
if(s[]=='a'){
rd(x);rd(y);
++x;++y;
link(x,y);
}else if(s[]=='d'){
rd(x);rd(y);
++x;++y;
cut(x,y);
}else if(s[]=='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 ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/4/11 20:11:40
*/

多项式可以支持合并

[THUWC2017]在美妙的数学王国中畅游的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. leetcode资料整理

    注:借鉴了 http://m.blog.csdn.net/blog/lsg32/18712353 在Github上提供leetcode有: 1.https://github.com/soulmachi ...

  2. 转载 -- jquery easyui datagrid 动态表头 + 嵌套对象属性展示

    代码功能: 1.datagrid 的表头由后台生成,可以配置在数据库 2.datagrid 的列绑定数据 支撑嵌套对象 $(function() { var columns = new Array() ...

  3. servlet篇 之servlet实现

    一:如何写一个servlet 实现/继承 如下 接口/类 Servlet   接口 有五个抽象方法 GenericServlet  抽象类     有一个抽象方法 HttpServlet   抽象类 ...

  4. 前端es6基础语法

    1.let.const.var var是声明全局的变量,作用域是全局,const是声明全局的常量,不能修改,而let是块级变量只在当前声明的作用域中生效: { var a = 10; let b = ...

  5. 常用模块collections

    collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...

  6. Qt QLineEdit

    //lineEdit显示文字 QLineEdit *lineEdit = new QLineEdit(widget); lineEdit->setObjectName(QString()); l ...

  7. BZOJ1449[JSOI2009]球队收益&BZOJ2895球队预算——最小费用最大流

    题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 提示   要求总费用最低 ...

  8. Redis——windows下如何连接Linux(centos7.x)虚拟机的Redis——【二】

    我的虚拟网络使用的是桥接网络和windows主机IP为同一网段,做下面步骤之前请确保网络通畅. 使用cmd的ping来测试 软件 https://redisdesktop.com/download 下 ...

  9. MVC 自定义 错误页面

    很多时候,我们需要自定义错误页面,用来当发生异常后引导用户进入一个比较友好的错误页面. 在这里,我归结一下我常用的2个方案 1   通过Global.asax 文件来处理异常信息(这个不管是 MVC ...

  10. UOJ276 [清华集训2016] 汽水 【二分答案】【点分治】【树状数组】

    题目分析: 这种乱七八糟的题目一看就是点分治,答案有单调性,所以还可以二分答案. 我们每次二分的时候考虑答案会不会大于等于某个值,注意到系数$k$是无意义的,因为我们可以通过转化使得$k=0$. 合并 ...