5020: [THUWC 2017]在美妙的数学王国中畅游
当年听llj讲的时候觉得这简直是个不可做的神题.
现在看来并不是很神,可能是我已经被剧透了的缘故...
一开始以为是函数套函数,懵蔽了好久,结果只是求和
被剧透了泰勒展开就比较水了..只要你不像我一样蠢的最最简单的求导都求错...
还有不像我一样蠢展开了看到有常数项不暴力二项式定理展开转而展开f(a*x+b)发现不会求e^b...
那么直接泰勒展开然后二项式定理暴力展开后用lct合并即可,维护个17项就差不多了
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=+;
typedef long long LL;
typedef double db;
using namespace std;
int n,m;
char o[];
db C[][],inv[],a_i[],b_i[]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int ch[N][],p[N],flip[N];
#define lc ch[x][0]
#define rc ch[x][1]
struct data {
db a[];
friend data operator +(const data&A,const data&B) {
data rs;
For(i,,) rs.a[i]=A.a[i]+B.a[i];
return rs;
}
}dt[N],sum[N]; int isroot(int x) {return (ch[p[x]][]!=x&&ch[p[x]][]!=x);} void update(int x) { sum[x]=dt[x]+sum[lc]+sum[rc]; } void down(int x) {
if(!flip[x]) return;
swap(lc,rc);
flip[x]^=;
flip[lc]^=;
flip[rc]^=;
} void rotate(int x) {
int y=p[x],z=p[y],l=(x==ch[y][]),r=l^;
if(!isroot(y)) ch[z][y==ch[z][]]=x; p[x]=z;
ch[y][l]=ch[x][r]; p[ch[x][r]]=y;
ch[x][r]=y; p[y]=x;
update(y); update(x);
} void splay(int x) {
static int g[N],top=,tp;
for(tp=x;!isroot(tp);tp=p[tp]) g[++top]=tp;
g[++top]=tp;
while(top) {down(g[top--]);}
for(;!isroot(x);rotate(x)) {
int y=p[x],z=p[y];
if(!isroot(y))
((x==ch[y][])^(y==ch[z][]))?rotate(x):rotate(y);
}
} void access(int x) {
for(int t=;x;x=p[t=x]) {
splay(x);
rc=t;
update(x);
}
} int find_root(int x) {
access(x);
splay(x);
while(lc) x=lc;
return x;
} void newroot(int x) {
access(x);
splay(x);
flip[x]^=;
} void lik(int x,int y) {
if(find_root(x)==find_root(y)) return;
newroot(x);
splay(x);
p[x]=y;
} void cut(int x,int y) {
newroot(x);
access(y);
splay(y);
if(ch[y][]==x) ch[y][]=p[x]=; update(y);
} void get_it(data &tp,int f,db a,db b) {
For(i,,) tp.a[i]=;
if(f==) { //sin(a*x+b);
a_i[]=b_i[]=;
For(i,,) a_i[i]=a_i[i-]*a,b_i[i]=b_i[i-]*b;
db f=1.0;
for(int i=;i<=;i+=,f=-f)
For(j,,i) tp.a[j]+=f*inv[i]*a_i[j]*b_i[i-j]*C[i][j];
}
else if(f==) { //e^(a*x+b);
a_i[]=b_i[]=;
For(i,,) a_i[i]=a_i[i-]*a,b_i[i]=b_i[i-]*b;
For(i,,) For(j,,i)
tp.a[j]+=inv[i]*a_i[j]*b_i[i-j]*C[i][j];
}
else tp.a[]=b,tp.a[]=a;
} db calc(data tp,db x) {
db rs=,now=;
For(i,,) {
rs=rs+tp.a[i]*now;
now*=x;
}
return rs;
} void change(int x,int f,db a,db b) {
splay(x);
get_it(dt[x],f,a,b);
update(x);
} void qry(int x,int y,db z) {
if(find_root(x)!=find_root(y)) {
puts("unreachable");
return;
}
newroot(x);
access(y);
splay(y);
printf("%.8le\n",calc(sum[y],z));
} //#define DEBUG
int main() {
#ifdef DEBUG
freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
#endif
read(n); read(m); scanf("%s",o);
For(i,,) C[i][]=;
For(i,,) For(j,,i) C[i][j]=C[i-][j]+C[i-][j-];
inv[]=inv[]=;
For(i,,) inv[i]=inv[i-]/(1.0*i);
for(int i=;i<=n;i++) {
int f; db a,b;
scanf("%d %lf %lf",&f,&a,&b);
get_it(dt[i],f,a,b);
}
while(m--) {
scanf("%s",o);
if(o[]=='a') {
int x,y; read(x); read(y);
lik(x+,y+);
}
else if(o[]=='d') {
int x,y; read(x); read(y); cut(x+,y+);
}
else if(o[]=='m') {
int x,f; db a,b;
scanf("%d %d %lf %lf",&x,&f,&a,&b);
change(x+,f,a,b);
}
else if(o[]=='t') {
int x,y; db z;
scanf("%d %d %lf",&x,&y,&z);
qry(x+,y+,z);
}
}
return ;
}
5020: [THUWC 2017]在美妙的数学王国中畅游的更多相关文章
- bzoj 5020: [THUWC 2017]在美妙的数学王国中畅游【泰勒展开+LCT】
参考:https://www.cnblogs.com/CQzhangyu/p/7500328.html --其实理解了泰勒展开之后就是水题呢可是我还是用了两天时间来搞懂啊 泰勒展开是到正无穷的,但是因 ...
- 【BZOJ5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT
[BZOJ5020][THUWC 2017]在美妙的数学王国中畅游 Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数 ...
- BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)
Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言: ...
- bzoj5020: [THUWC 2017]在美妙的数学王国中畅游
Description 数学王国中,每个人的智商可以用一个属于 [0,1]的实数表示.数学王国中有 n 个城市,编号从 0 到 n−1 ,这些城市由若干座魔法桥连接.每个城市的中心都有一个魔法球,每个 ...
- bzoj 5020(洛谷4546) [THUWC 2017]在美妙的数学王国中畅游——LCT+泰勒展开
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5020 https://www.luogu.org/problemnew/show/P4546 ...
- 解题:THUWC 2017 在美妙的数学王国中畅游
题面 _“数字和数学规律主宰着这个世界.”_ 在 @i207M 帮助下折腾了半天终于搞懂了导数和泰勒展开,引用某学长在考场上的感受:感觉整个人都泰勒展开了 显然是个奇奇怪怪的东西套上LCT,发现直接维 ...
- 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) ...
- BZOJ5020 [THUWC 2017]在美妙的数学王国中畅游LCT
题意很明显是要用LCT来维护森林 难点在于如何处理函数之间的关系 我们可以根据题目给的提示关于泰勒展开的式子 将三种函数变成泰勒展开的形式 因为$x∈[0,1]$ 所以我们可以将三个函数在$x_0=0 ...
随机推荐
- 清除浮动的方法(float)
方式一: 额外标签法:给浮动的元素后面新增加一个清除浮动的盒子 例如: <div style="float: left">浮动盒子</div> <di ...
- 零距离接触阿里云时序时空数据库TSDB
概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增.阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空数 ...
- 43 编译原理及cmake使用手册学习
0 引言 大量开源库需要通过cmake编译后使用,了解cmake的基本指令以及CMakeLists.txt的写法非常重要,其基础是了解编译原理.另外,为了对cmake编译的代码进行调试,需要了解CMa ...
- UIWindow & UIWindowLevel笔记
一.UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面.UIWindow在程序中主要起到三个作用: 1.作为容器 ...
- xcode5 添加Build Phases脚本
http://www.runscriptbuildphase.com/ 版权声明:本文为博主原创文章,未经博主允许不得转载.
- 堡垒机介绍及实现 (使用python django实现)(一)
堡垒机介绍及实现 (使用python django实现)(一) 堡垒机的功能 我们在使用服务器的时候,通常的方式是 ssh user@ip 然后输入password 多人同时使用,就需要多个账号.这时 ...
- [转] 多个文件目录下Makefile的写法
1.前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile.关于Makefile的详细内容可以参考网上流传非常广泛的<跟我一起写Ma ...
- 自动化测试工具2-testcomplete
今天来说说testcomplete的使用 录了一个简单案例视频,网址如下:https://v.qq.com/x/page/f05116a062y.html 第一步是创建一个工程: 输入工程名,和选择工 ...
- 20140316 window live write 插件 推荐代码高亮插件 构造函数只能用初始化成员列表方式的例子
1.window live write 插件:http://www.cnblogs.com/liuxianan/archive/2013/04/13/3018732.html 2.推荐代码高亮插件:W ...
- JavaScript网页特效5则
动态字幕 代码:在需要处加入 < marquee onmouseover=this.stop() onmouseout=this.start()>欢迎访问JavaScript教程网 特点: ...