[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]在美妙的数学王国中畅游的更多相关文章
- [BZOJ5020][THUWC2017]在美妙的数学王国中畅游(LCT)
5020: [THUWC 2017]在美妙的数学王国中畅游 Time Limit: 80 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 323 ...
- Luogu4546 THUWC2017 在美妙的数学王国中畅游 LCT、泰勒展开
传送门 题意:反正就是一堆操作 LCT总是和玄学东西放在一起我们不妨令$x_0=0.5$(其实取什么都是一样的,但是最好取在$[0,1]$的范围内),将其代入给出的式子,我们得到的$f(x)$的式子就 ...
- [THUWC2017]在美妙的数学王国中畅游 LCT+泰勒展开+求导
p.s. 复合函数求导时千万不能先带值,再求导. 一定要先将符合函数按照求导的规则展开,再带值. 设 $f(x)=g(h(x))$,则对 $f(x)$ 求导: $f'(x)=h'(x)g'(h(x)) ...
- [LOJ2289][THUWC2017]在美妙的数学王国中畅游:Link-Cut Tree+泰勒展开
分析 又有毒瘤出题人把数学题出在树上了. 根据泰勒展开,有: \[e^x=1+\frac{1}{1!}x+\frac{1}{2!}x^2+\frac{1}{3!}x^3+...\] \[sin(x)= ...
- 题解 洛谷 P4546 【[THUWC2017]在美妙的数学王国中畅游】
首先发现有连边和删边的操作,所以我们肯定要用\(LCT\)来进行维护. 接下来考虑如何进行\(LCT\)上的信息合并. \(f=1\),则函数为\(f(x)=sin(ax+b)\) \(f=2\),则 ...
- Luogu P4546 [THUWC2017]在美妙的数学王国中畅游
题意 题意奇奇怪怪,这里就不写了. \(\texttt{Data Range:}1\leq n\leq 10^5,1\leq m\leq 2\times 10^5\) 题解 为什么你们都是卡在数学方面 ...
- 洛谷P4546 [THUWC2017]在美妙的数学王国中畅游 [LCT,泰勒展开]
传送门 毒瘤出题人卡精度-- 思路 看到森林里加边删边,容易想到LCT. 然而LCT上似乎很难实现往一条链里代一个数进去求和,怎么办呢? 善良的出题人在下方给了提示:把奇怪的函数泰勒展开搞成多项式,就 ...
- P4546 [THUWC2017]在美妙的数学王国中畅游
如果只有第3个操作,那么这就是个sd题,随便lct搞搞就过去了 然后就是一个神仙东西 taylor公式 我不会,看gsy博客https://www.cnblogs.com/zhoushuyu/p/81 ...
- BZOJ5020 THUWC2017在美妙的数学王国中畅游(LCT)
明摆着的LCT,问题在于如何维护答案.首先注意到给出的泰勒展开式,并且所给函数求导非常方便,肯定要用上这玩意.容易想到展开好多次达到精度要求后忽略余项.因为x∈[0,1]而精度又与|x-x0|有关,当 ...
随机推荐
- js怎么能取得多选下拉框选中的多个值?
方法:获取多选下拉框对象数组→循环判断option选项的selected属性(true为选中,false为未选中)→使用value属性取出选中项的值.实例演示如下: 1.HTML结构 1 2 3 4 ...
- comparable和comparator
Comparable Comparable可以认为是一个内部比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,在compareTo方法中指定具体的比较方法. comp ...
- EmpireCMS的使用
1.下载安装empirecms 下载完成后解压将upload目录整体上传到服务器,并更名为empirecms_test 更改目录文件的权限: chmod -R 777 empirecms_test 配 ...
- mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱
mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱 前言:使用 mybatis generator 生成表格对应的pojo.dao.mapper,以及对应的example的 ...
- WebStorm开发React项目,修代码之后运行的项目不更新
昨天遇到一个恶心的问题,我新建了一个React.js项目,想做一点关于Pc端的开发,习惯性的用了WebStorm,可是发现一个问题,就是代码修改之后,浏览器上根本不会刷新.然后,我把方向定位在没有正确 ...
- C# 获取文件详细备注信息 (如图片、视频实际创建时间)
在整理照片/视频时想根据实际拍摄时间重命名文件,但 System.IO.FileInfo 只能获取到文件的创建时间或最后写入时间,不符合要求,遂寻找解决方案 方案 1: System.Drawing ...
- FMC
FMC (FPGA Mezzanine Card) 编辑 FMC:英文全称,FPGA Mezzanine Card.是一个应用范围.适应环境范围和市场领域范围都很广的通用模块.FMC连接器(FMC C ...
- vpx
VPX 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! VPX总线是VITA(VME International Trade Association, VME国际贸易协 ...
- B-树 B+树复习总结
一.B-树的定义 一棵m阶的B-树或为空树,或为具有以下特性的m叉树 1.树中每个结点至多有m棵子树 (m-1个关键字) 2.根结点至少有两棵子树 (至少有一个关键字) 3.除根节点的分支结点至少有f ...
- git bash 下操作文件及文件夹命令
1, cd : change directory的简写,改变目录的意思,就是切换到哪个目录下, 如 cd e:\fff 切换 E 盘下面的fff 目录. 当我们用cd 进入文件夹时,我们可以使用 通 ...