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 --其实理解了泰勒展开之后就是水题呢可是我还是用了两天时间来搞懂啊 泰勒展开是到正无穷的,但是因 ...
随机推荐
- (17)模型层 -ORM之msql 单表的增、删、改、查 及其他操作
单表操作-增.删.改.查 ret=models.User.objects.filter(id=1) #这里的结果是一个queryset对象 ret=modles.User.Objects.filte ...
- (0-1)CSS 标签语法的属性
CSS text-decoration 属性 display display 属性规定元素应该生成的框的类型
- whmcs语言汉化路径
前台语言访问文件夹/lang,后台语言文件放入/admin/lang
- 企业wiki之confluence安装部署(linux)及其破解
系统环境(虚拟机) centos6.5 2G运行内存,30g硬盘,cpu最好也分配两个或多个,因为我在安装过程中发现很卡,cpu占用率几乎占满 需要用到的安装包和文件可以在这里找 链接:https ...
- System类的使用
1.System类: 不能被实例化,调用方式: System.方法 2.用于计算程序执行的时间,currentTimeMillis()方法 System.currentTimeMillis(): p ...
- lsusb
1.lsusb查看系统的USB设备 $ lsusb Bus Device : ID : Kingston Technology Bus Device : ID 1d6b: Linux Foundati ...
- 关于导出csv格式文件的身份证号、日期的处理
EXCEL系统的单元格,默认格式是常规或数值格式下,数字超过10位即以科学计数法显示,对15位以后的数字用0填充. 在导入到Excel.导出csv文件时,对于身份证号自动变成科学计数法的地方,就要做一 ...
- linux下常见软件安装
读者还可以参考文档:https://download.csdn.net/download/qq_27799563/10482900 Mysql的安装过程: 解压MySQL安装包: tar -xvf M ...
- 利用JSON将Map转换为类对象
Map类型做为一种常见的Java类型,经常在开发过程中使用,笔者最近遇到要将Map对象做为一种通用的参数变量,下传到多个业务类方法中,然后在各个业务类方法中将Map转换为指定类对象的情况.如何将Map ...
- Mysql5.6 for Centos6.5源码编译安装
## 说明 不同服务器需要改变 server_id ,同一台机器上需要改变 port 1. 关闭防火墙[root@mysql ~]# service iptables status --查看防火墙状态 ...