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 ...
随机推荐
- FTPClient登录慢的问题
java上传文件到ftp上,发现特别慢,debug了一下发现链接正常,ftp.login(username, password)这个登录方法特别慢 解决方案: vi /etc/vsftpd/vsftp ...
- 2019-10-10-dotnet-新-sdk-style-项目格式的一些命名空间和引用
title author date CreateTime categories dotnet 新 sdk style 项目格式的一些命名空间和引用 lindexi 2019-10-10 10:6:46 ...
- 过滤器 一 Filter
import javax.servlet.Filter; 前言 过滤器是一个程序,依赖与servlet容器,它先于与之相关的servlet或JSP页面运行在服务器上.过滤器可附加到一个或多个servl ...
- mui与springMVC前后端分离
这个小dome简单来说的前后端分离,通过跨域调用接口来显示数据. 前端用到mui框架,主要来显示数据. 后端用到Java的springMVC,restful服务来做增删改查管理, 这里主要实现动态显示 ...
- 回文树上dfs——牛客多校第六场C
/* set里的一定是本质不同的回文串,所以先建立回文树 当a可以通过nxt指针到达b,或者b可以通过fail指针到达a时,a就是b的子串 对于回文树里的每个结点u,我们可以将和其有关的结点为两部分: ...
- BZOJ 3534: [Sdoi2014]重建(Matrix Tree)
传送门 解题思路 比较容易看的出来矩阵树定理.然后就怒送一Wa,这个矩阵树定理是不能直接用的.题目要求的其实是这个玩意. \[ ans=\sum\limits_{Tree}( \prod\limits ...
- csp-s模拟测试92
csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...
- ACM-ICPC 2018 沈阳赛区网络预赛-B,F,G
学长写的 F. Fantastic Graph "Oh, There is a bipartite graph.""Make it Fantastic." X ...
- sqlserver中常用的windows命令行的操作
1.删除指定目录下指定时间之前的文件: ), ), @sqltxtdel varchar(max) --指定的删除时间 set @deldate= '-8' --指定的删除路径 set @bakpat ...
- JTable更新内容的方法
JTable更新内容的方法 DefaultTableModel dtm=new DefaultTableModel(data,head);//定义表格模型 jt.setModel(dtm);或jt=n ...