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 --其实理解了泰勒展开之后就是水题呢可是我还是用了两天时间来搞懂啊 泰勒展开是到正无穷的,但是因 ...
随机推荐
- linux最常用的20个命令
玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...
- 在城市后面加上省,市,区 以及将MySQL入库脚本封装成class
在城市后面加省,市,区时,使用过滤器和for循环,if判断 一起使用. 自定义一个过滤器 def my_detail(val): ...
- (2)MySQL的增删改查基本操作
数据库增删改查的基本操作(数据文件在data目录下) 数据库的专业术语 1.文件夹:数据库 2.文件:数据表 指令的注意事项 1.用use的时候指令结尾不需要跟一个分号 ‘:’ 2.如果用show或其 ...
- c++期末考
1. 谁不及格? Problem:A Time Limit:1000ms Memory Limit:65535K Description 聪聪的班主任王老师最近有点忙,可是他又是一位非常细心的老师,每 ...
- hdu4998 Rotate 计算几何
Noting is more interesting than rotation! Your little sister likes to rotate things. To put it easie ...
- 写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。java算法
知识点一:equalsIgnore 1.使用equals( )方法比较两个字符串是否相等.它具有如下的一般形式: boolean equals(Object str) 这里str是一个用来与调用字符串 ...
- adx-desc-adtype统计
数据分析脚本: filepath="request.log.2017-12-01-15" File.open("#{filepath}").each do |l ...
- 自定义简单的模板引擎-JS模板引擎
http://www.cnblogs.com/52fhy/p/5393673.html
- 获取当前 服务 路径 .net
using System; //例如 AppDomain.CurrentDomain.BaseDirectory + "\\Setting.ini";
- [转]kafka详解
一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设 ...