传送门

当年听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]在美妙的数学王国中畅游的更多相关文章

  1. bzoj 5020: [THUWC 2017]在美妙的数学王国中畅游【泰勒展开+LCT】

    参考:https://www.cnblogs.com/CQzhangyu/p/7500328.html --其实理解了泰勒展开之后就是水题呢可是我还是用了两天时间来搞懂啊 泰勒展开是到正无穷的,但是因 ...

  2. 【BZOJ5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT

    [BZOJ5020][THUWC 2017]在美妙的数学王国中畅游 Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数 ...

  3. BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)

    Description 数字和数学规律主宰着这个世界.   机器的运转,   生命的消长,   宇宙的进程,   这些神秘而又美妙的过程无不可以用数学的语言展现出来.   这印证了一句古老的名言:   ...

  4. bzoj5020: [THUWC 2017]在美妙的数学王国中畅游

    Description 数学王国中,每个人的智商可以用一个属于 [0,1]的实数表示.数学王国中有 n 个城市,编号从 0 到 n−1 ,这些城市由若干座魔法桥连接.每个城市的中心都有一个魔法球,每个 ...

  5. bzoj 5020(洛谷4546) [THUWC 2017]在美妙的数学王国中畅游——LCT+泰勒展开

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5020 https://www.luogu.org/problemnew/show/P4546 ...

  6. 解题:THUWC 2017 在美妙的数学王国中畅游

    题面 _“数字和数学规律主宰着这个世界.”_ 在 @i207M 帮助下折腾了半天终于搞懂了导数和泰勒展开,引用某学长在考场上的感受:感觉整个人都泰勒展开了 显然是个奇奇怪怪的东西套上LCT,发现直接维 ...

  7. bzoj5020 & loj2289 [THUWC 2017]在美妙的数学王国中畅游 LCT + 泰勒展开

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5020 https://loj.ac/problem/2289 题解 这个 appear 和 d ...

  8. [THUWC 2017]在美妙的数学王国中畅游

    bzoj5020 \[答案误差只要小于 10^{-7}\] 题解 Taylor展开式: \[若f(x)的n阶导数在[a, b]内连续,则f(x)在x_{0}\in[a, b]可表示为\] \[f(x) ...

  9. BZOJ5020 [THUWC 2017]在美妙的数学王国中畅游LCT

    题意很明显是要用LCT来维护森林 难点在于如何处理函数之间的关系 我们可以根据题目给的提示关于泰勒展开的式子 将三种函数变成泰勒展开的形式 因为$x∈[0,1]$ 所以我们可以将三个函数在$x_0=0 ...

随机推荐

  1. unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL - 用于本地内部进程通讯的套接字。

    SYNOPSIS(总览) #include <sys/socket.h> #include <sys/un.h> unix_socket = socket(PF_UNIX, t ...

  2. OneDrive一直后台占用CPU的一种解决办法

    系统版本:Windows 7 ultimate x64 Onedrive版本:17.3.6998.0830 最近发现Onedrive一直在后台占用15%左右的CPU,很是觉得奇怪,网上的解决方案是删除 ...

  3. Ubuntu下安装nfs,Windows下访问

    Linux 下: 1. 在终端输入  sudo apt-get install portmap nfs-common nfs-kernel-server 2.建立客户机访问目录  sudo mkdir ...

  4. 从零开始搭建系统1.1——CentOs安装

    本篇主要是记录安装CentOs的过程,为什么会选择CentOs,没有过多的原因,主要是出于CentOs相对来说安装的人比较多, 以后有问题了方便查资料.本次安装是安装在一台笔记本上,WIN7+Cent ...

  5. 如何在Windows10操作系统下安装superset步骤分享

    superset是一个轻量级自助式BI框架,以优雅的界面和根据数据表动态生成数据为主要特点. 一. 环境 windows 10 64位 Python 3.7 二. 安装步骤 安装Python 建议安装 ...

  6. java之短路与&&和短路或||

    短路的意思就是惰性计算,符号右边的就不进行计算了. ||和&&就是这样,

  7. POJ3436:ACM Computer Factory-最大流

    目录 目录 思路: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意:传送门  原题目描述在最下面.  题目真难读懂 有\(n\)台机器,每台机器有\(p\)个部分,每台机 ...

  8. 秒懂机器学习---k临近算法(KNN)

    秒懂机器学习---k临近算法(KNN) 一.总结 一句话总结: 弄懂原理,然后要运行实例,然后多解决问题,然后想出优化,分析优缺点,才算真的懂 1.KNN(K-Nearest Neighbor)算法的 ...

  9. 秦曾昌人工智能课程---5、KNN和朴素贝叶斯

    秦曾昌人工智能课程---5.KNN和朴素贝叶斯 一.总结 一句话总结: 拟合和概率:构建机器学习模型,一般有拟合和概率两种方式 轻学无用:一定要保证学有所用,要深入学习,比如之前做的安卓,一定要学通, ...

  10. 数据结构C++版-树

    一.概念 树是节点的有限集合. 二叉树: 二.补充知识点 1.<二叉树编码实战二>课程笔记: 递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 迭代:利用变量的原值推算 ...