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 ...
随机推荐
- zdump - 时区输出器
SYNOPSIS 总览 zdump [ -v ] [ -c cutoffyear ] [ zonename ... ] 描述 Zdump 对命令行中的每一个 zonename 输出其当前时间. 提供了 ...
- linux 下无法输入# 显示为£
在键盘布局里面,(Keyboard Layout)设置为中国,汉语.解决问题
- java.lang.ThreadLocal的作用和原理?列举在哪些程序中见过ThreadLocal的使用?
java.lang.ThreadLocal的作用和原理?列举在哪些程序中见过ThreadLocal的使用? 说明类java.lang.ThreadLocal的作用和原理.列举在哪些程序中见过Threa ...
- vue之axios的使用
一.环境安装 1.axios的安装 进入到对应工程目录执行: npm install axios 2.启动测试数据的API 测试项目地址:https://github.com/ShenJianPing ...
- shell脚本中关于日期的操作
一.计算指定日期的前一天的日期 date -d "yesterday 20150401 " +%Y%m%d 二.如果获取当前日期的前一天 date -d " ...
- python-面向对象-01课堂笔记
面向对象 ''''1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 ...
- C#发邮件之命名空间System.Net.Mail
1.添加一个类,取名为Email public class Email { /// <summary> /// 发送方发送方服务器地址 /// </summary> publi ...
- 8-26接口压力测试-3Jmeter-Java请求
1.新建maven工程 2.导入依赖,并使用shade将所需的依赖打入jar包 <?xml version="1.0" encoding="UTF-8"? ...
- bzoj1022题解
[题意分析] 最简单的Anti-Nim博弈模型. [解题思路] 引理:SJ定理 对于一个Anti-Nim游戏,只要有以下两条条件之一,先手必胜: 1.游戏的总SG函数为0且任意子游戏的SG函数不超过1 ...
- dfs套异或的包含性——cf986C好
很好的题,想了半天,官方题解的解法更好 这种异或问题的包含性在北邮的校赛里就出现过,需要认真学习一下 /* y和所有合法的x合并,如果没有剪枝,那么复杂度爆炸总共要判(2^n*2^n) 可以考虑如下优 ...