bzoj5020: [THUWC 2017]在美妙的数学王国中畅游
Description
Input
Output
考虑到函数定义域都是[0,1],维护函数在0.5处的泰勒展开的前几项,可以达到精度要求,然后就是经典的lct操作了
#include<bits/stdc++.h>
typedef double ld;
const int K=,N=1e5+;
ld fiv[K];
struct node{
node*f,*c[];
int rv;
ld v[K],s[K];
void revs(){
if(this)rv^=,std::swap(c[],c[]);
}
void up(ld*a){
for(int i=;i<K;++i)s[i]+=a[i];
}
void up(){
for(int i=;i<K;++i)s[i]=v[i];
if(c[])up(c[]->s);
if(c[])up(c[]->s);
}
void dn(){
if(rv){
c[]->revs();
c[]->revs();
rv=;
}
}
bool nrt(){
return f&&(f->c[]==this||f->c[]==this);
}
int wc(){
return this==f->c[];
}
ld cal(ld x){
x-=0.5;
ld y=;
for(int i=K-;i>=;--i)y=y*x+s[i];
return y;
}
void init(int tp,ld a,ld b){
b+=a/;
if(tp==){
double z[]={sin(b),cos(b),-sin(b),-cos(b)},pa=;
for(int i=;i<K;++i)v[i]=z[i%]*pa*fiv[i],pa*=a;
}else if(tp==){
double z=exp(b);
for(int i=;i<K;++i)v[i]=z*fiv[i],z*=a;
}else if(tp==){
v[]=b,v[]=a;
for(int i=;i<K;++i)v[i]=;
}
up();
}
}ns[N],*ss[N];
int ssp=;
void sc(node*x,int d,node*y){
if(x->c[d]=y)y->f=x;
}
void rot(node*x){
node*f=x->f,*g=f->f;
int d=x->wc();
if(f->nrt())g->c[f->wc()]=x;
x->f=g;
sc(f,d,x->c[d^]);
sc(x,d^,f);
f->up();
}
void sp(node*x){
for(node*a=x;(ss[ssp++]=a)->nrt();a=a->f);
while(ssp)ss[--ssp]->dn();
while(x->nrt()){
node*f=x->f;
if(f->nrt())rot(x->wc()==f->wc()?f:x);
rot(x);
}
x->up();
}
void acs(node*x){for(node*y=;x;sp(x),x->c[]=y,x->up(),y=x,x=x->f);}
void mrt(node*x){acs(x);sp(x);x->revs();}
void lk(node*x,node*y){mrt(x);x->f=y;}
void get(node*x,node*y){mrt(x),acs(y),sp(y);}
void ct(node*x,node*y){get(x,y);x->f=y->c[]=;y->up();}
int n,m,tp;
ld a,b;
int main(){
for(int i=fiv[]=;i<K;++i)fiv[i]=fiv[i-]/i;
scanf("%d%d%*s",&n,&m);
for(int i=;i<n;++i){
scanf("%d%lf%lf",&tp,&a,&b);
ns[i].init(tp,a,b);
}
while(m--){
char op[];
int x,y;
scanf("%s%d%d",op,&x,&y);
if(op[]=='a')lk(ns+x,ns+y);
else if(op[]=='d')ct(ns+x,ns+y);
else if(op[]=='t'){
scanf("%lf",&a);
get(ns+x,ns+y);
node*w=ns+x;
while(w->f)w=w->f;
if(w==ns+y)printf("%.8e\n",w->cal(a));
else puts("unreachable");
sp(ns+x);
}else{
scanf("%lf%lf",&a,&b);
sp(ns+x);
ns[x].init(y,a,b);
}
}
return ;
}
bzoj5020: [THUWC 2017]在美妙的数学王国中畅游的更多相关文章
- BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)
Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言: ...
- BZOJ5020 [THUWC 2017]在美妙的数学王国中畅游LCT
题意很明显是要用LCT来维护森林 难点在于如何处理函数之间的关系 我们可以根据题目给的提示关于泰勒展开的式子 将三种函数变成泰勒展开的形式 因为$x∈[0,1]$ 所以我们可以将三个函数在$x_0=0 ...
- 【BZOJ5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT
[BZOJ5020][THUWC 2017]在美妙的数学王国中畅游 Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数 ...
- bzoj5020 & loj2289 [THUWC 2017]在美妙的数学王国中畅游 LCT + 泰勒展开
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5020 https://loj.ac/problem/2289 题解 这个 appear 和 d ...
- [THUWC 2017]在美妙的数学王国中畅游
bzoj5020 \[答案误差只要小于 10^{-7}\] 题解 Taylor展开式: \[若f(x)的n阶导数在[a, b]内连续,则f(x)在x_{0}\in[a, b]可表示为\] \[f(x) ...
- 解题:THUWC 2017 在美妙的数学王国中畅游
题面 _“数字和数学规律主宰着这个世界.”_ 在 @i207M 帮助下折腾了半天终于搞懂了导数和泰勒展开,引用某学长在考场上的感受:感觉整个人都泰勒展开了 显然是个奇奇怪怪的东西套上LCT,发现直接维 ...
- bzoj 5020(洛谷4546) [THUWC 2017]在美妙的数学王国中畅游——LCT+泰勒展开
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5020 https://www.luogu.org/problemnew/show/P4546 ...
- loj2289 [THUWC 2017]在美妙的数学王国中畅游(LCT+Taylor展开)
link 题目大意: 你需要维护一个树 每个点都有个sin(ax+b)或exp(ax+b)或ax+b 你需要维护一些操作:连边.删边.修改某个点的初等函数.询问某条树链上所有函数带入某个值后权值和或不 ...
- bzoj 5020: [THUWC 2017]在美妙的数学王国中畅游【泰勒展开+LCT】
参考:https://www.cnblogs.com/CQzhangyu/p/7500328.html --其实理解了泰勒展开之后就是水题呢可是我还是用了两天时间来搞懂啊 泰勒展开是到正无穷的,但是因 ...
随机推荐
- python学习之路02
1.python的数据类型有:Number String List Truple Sets Dictionary . 数字类型:int float bool complex 2.不可变数据:数字 字符 ...
- jmeter定时器
一.定时器的作用 1.定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面): 2.当执行一个sampler之前时,所有当前作用域内的定时器都会被执 ...
- 什么是 JVM
什么是 JVM 先来看下百度百科的解释: JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算 ...
- Git图形化界面客户端大汇总
文,还在不断更新,网上搜到的同名文章都是未经同意就从这里复制过去的) 一.TortoiseGit - The coolest Interface to Git Version Control Tort ...
- 《DSP using MATLAB》Problem 6.21
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- mysql 常用函数-locate 和 instr 和 regexp
★1 -- 表级锁 情况SHOW STATUS LIKE 'table%';-- 行级锁 情况SHOW STATUS LIKE 'innodb_row_lock%'; -- 进程列表SHOW PROC ...
- $trainClassLayer.find('input[name=data-item-checkbox]').eq(index).change();//激活第index+1那个checkbox
☆ $.each(data, function (index, org) { if (org.alreadySent) { $trainClassLayer.find('input[name=data ...
- [原] Android上使用native IO
首先, 官方google play对APK大小有限制: 50M.( https://support.google.com/googleplay/android-developer/answer/113 ...
- C++中的ravalue学习笔记
一.学习笔记 1. A a = 42; 会先以42为参数构造一个A类对象,然后调用拷贝构造函数来构造a,目前编译器优化掉了拷贝构造函数的调用,测试拷贝构造函数是没有被调用的,但是其权限不能为priva ...
- Scala中的Map使用例子
Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法. (1)不可变Map特点: api不太丰富 如果是 ...