Luogu4546 THUWC2017 在美妙的数学王国中畅游 LCT、泰勒展开
题意:反正就是一堆操作
LCT总是和玄学东西放在一起
我们不妨令$x_0=0.5$(其实取什么都是一样的,但是最好取在$[0,1]$的范围内),将其代入给出的式子,我们得到的$f(x)$的式子就是一个多项式了。
然后复习一下导数:
$(Cf(x))'=Cf'(x)$($C$为常数)
$sin'(x)=cos(x),cos'(x)=-sin(x),(e^x)'=e^x,C'=0 , (ax+b)'=a$
令$g(x)=u$,则$f[g(x)]' = f'(u) \times g'(x)$
有了这些式子就可以得到给出的三种函数的任意阶导数了。
但是显然我们不能把所有项的系数都算出来。因为在比较靠后的项中,阶乘的值很大,对答案造成的贡献就会小到忽略不计,所以我们可以取前面若干项,这里我取的是前$12$项。
然后用$LCT$维护这些项的系数和,每一次询问把链拿出来直接算就行了,难题变成裸题了qwq
#include<bits/stdc++.h>
#define ld long double
//This code is written by Itst
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
;
struct node{
ld point[] , pre[] , a , b;
] , fa , type;
bool mark;
}Tree[MAXN];
int N;
];
inline bool nroot(int x){
] == x || Tree[Tree[x].fa].ch[] == x;
}
inline bool son(int x){
] == x;
}
inline ld calc(int type , int n , ld a , ld b){
ld sum = ;
switch(type){
:
){
:
sum = sin(0.5 * a + b);
break;
:
sum = cos(0.5 * a + b);
break;
:
sum = -sin(0.5 * a + b);
break;
:
sum = -cos(0.5 * a + b);
break;
}
return sum * pow(a , n);
:
return pow(a , n) * exp(a * 0.5 + b);
:
switch(n){
:
return a * 0.5 + b;
:
return a;
default:
;
}
}
}
inline void pushup(int x){
; i <= ; ++i)
Tree[x].point[i] = Tree[x].pre[i] + Tree[Tree[x].ch[]].point[i] + Tree[Tree[x].ch[]].point[i];
}
inline void getpre(int x){
; i <= ; ++i)
Tree[x].pre[i] = calc(Tree[x].type , i , Tree[x].a , Tree[x].b);
}
inline void ZigZag(int x){
bool f = son(x);
];
if(nroot(y))
Tree[z].ch[son(y)] = x;
Tree[x].fa = z;
Tree[x].ch[f ^ ] = y;
Tree[y].fa = x;
Tree[y].ch[f] = w;
if(w)
Tree[w].fa = y;
pushup(y);
pushup(x);
}
inline void pushdown(int x){
if(Tree[x].mark){
Tree[Tree[x].ch[]].mark ^= ;
Tree[Tree[x].ch[]].mark ^= ;
Tree[x].mark = ;
swap(Tree[x].ch[] , Tree[x].ch[]);
}
}
void pushdown_all(int x){
if(nroot(x))
pushdown_all(Tree[x].fa);
pushdown(x);
}
inline void Splay(int x){
pushdown_all(x);
while(nroot(x)){
if(nroot(Tree[x].fa))
ZigZag(son(x) == son(Tree[x].fa) ? Tree[x].fa : x);
ZigZag(x);
}
}
inline void access(int x){
; x ; y = x , x = Tree[x].fa){
Splay(x);
Tree[x].ch[] = y;
pushup(x);
}
}
inline int findroot(int x){
access(x);
Splay(x);
pushdown(x);
])
pushdown(x = Tree[x].ch[]);
Splay(x);
return x;
}
inline void makeroot(int x){
access(x);
Splay(x);
Tree[x].mark ^= ;
}
inline void split(int x , int y){
makeroot(x);
access(y);
Splay(y);
}
inline void link(int x , int y){
makeroot(x);
Tree[x].fa = y;
}
inline void cut(int x , int y){
split(x , y);
Tree[y].ch[] = Tree[x].fa = ;
pushup(y);
}
inline void change(int x , int type , ld a , ld b){
access(x);
Splay(x);
Tree[x].type = type;
Tree[x].a = a;
Tree[x].b = b;
getpre(x);
pushup(x);
}
int main(){
freopen("4546.in" , "r" , stdin);
freopen("4546.out" , "w" , stdout);
N = read();
int M = read();
read();
; i <= N ; ++i){
Tree[i].type = read();
scanf("%Lf %Lf" , &Tree[i].a , &Tree[i].b);
getpre(i);
}
while(M--){
ld a , b , times , jc;
int d , e;
if(scanf("%s" , s) == EOF)
;
]){
case 'a':
d = read() + ;
e = read() + ;
link(d , e);
break;
case 'd':
d = read() + ;
e = read() + ;
cut(d , e);
break;
case 'm':
d = read() + ;
e = read();
scanf("%Lf %Lf" , &a , &b);
change(d , e , a , b);
break;
case 't':
d = read() + ;
e = read() + ;
scanf("%Lf" , &a);
if(findroot(d) != findroot(e))
puts("unreachable");
else{
split(d , e);
b = ;
times = jc = ;
a -= 0.5;
; i <= ; ++i){
b += times * Tree[e].point[i] / jc;
times *= a;
jc *= (i + );
}
printf("%.9Lf\n" , b);
}
}
}
;
}
Luogu4546 THUWC2017 在美妙的数学王国中畅游 LCT、泰勒展开的更多相关文章
- [THUWC2017]在美妙的数学王国中畅游 LCT+泰勒展开+求导
p.s. 复合函数求导时千万不能先带值,再求导. 一定要先将符合函数按照求导的规则展开,再带值. 设 $f(x)=g(h(x))$,则对 $f(x)$ 求导: $f'(x)=h'(x)g'(h(x)) ...
- [BZOJ5020][THUWC2017]在美妙的数学王国中畅游(LCT)
5020: [THUWC 2017]在美妙的数学王国中畅游 Time Limit: 80 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 323 ...
- 【BZOJ5020】[LOJ2289]【THUWC2017】在美妙的数学王国中畅游 - LCT+泰勒展开
咕咕咕?咕咕咕! 题意: Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言 ...
- BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)
Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言: ...
- 【BZOJ5020】【THUWC2017】在美妙的数学王国中畅游 LCT 泰勒展开
题目大意 给你一棵树,每个点有一个函数\(f(x)\) 正弦函数 \(\sin(ax+b) (a\in[0,1],b\in[0,\pi],a+b\in[0,\pi])\) 指数函数 \(e^{ax+b ...
- 洛谷P4546 [THUWC2017]在美妙的数学王国中畅游 [LCT,泰勒展开]
传送门 毒瘤出题人卡精度-- 思路 看到森林里加边删边,容易想到LCT. 然而LCT上似乎很难实现往一条链里代一个数进去求和,怎么办呢? 善良的出题人在下方给了提示:把奇怪的函数泰勒展开搞成多项式,就 ...
- [THUWC2017][bzoj5020] 在美妙的数学王国中畅游 [LCT+泰勒展开]
题面 LOJ传送门 思路 这里很重要 它提示我们,把给定的三个函数泰勒展开,并用LCT维护每一项泰勒展开式的值,维护十几项就满足了题目的精度要求 我们考虑一个函数在0位置的泰勒展开 $f(x)=\su ...
- 「LOJ 2289」「THUWC 2017」在美妙的数学王国中畅游——LCT&泰勒展开
题目大意: 传送门 给一个动态树,每个节点上维护一个函数为$f(x)=sin(ax+b)$.$f(x)=e^{ax+b}$.$f(x)=ax+b$中的一个. 支持删边连边,修改节点上函数的操作. 每次 ...
- bzoj 5020(洛谷4546) [THUWC 2017]在美妙的数学王国中畅游——LCT+泰勒展开
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5020 https://www.luogu.org/problemnew/show/P4546 ...
随机推荐
- 微信小程序踩过的一些坑
前言 迄今为止,正儿八经的上线了真正意义上的程序,但是这个小程序却着实不小. 之所以不小,是因为这个类似于社区的小程序,已经做了大部分都有的功能了 举例说明,具体的一些功能点: 1.帖子列表页面:会有 ...
- Apex计划作业框架的实现
Apex计划作业框架的实现 在本文中,我们实现一个简单的"计划作业框架",用于实现数据的定时自动处理. Apex相关接口 Apex中提供了一组接口用来实现数据的处理.我们主要使用以 ...
- 最新安全狗 apache v4.0 sql注入 bypass
前言 最近没事学习一下 waf 的 bypass , 本文介绍下 bypass 安全狗的笔记.个人感觉 bypass 的总思路(正则匹配型 waf)就是利用各种语法特性来逃避正则(当然要保证语法正确性 ...
- .Net Core(一)环境搭建与基本使用
.Net Core(一)环境搭建与基本使用 一.系统配置 a) Linux下如果想要打开类似任务管理器,可以使用top命令,在控制台会动态刷新CPU和内存占用.进程等信息.vmstat和free命令可 ...
- ios开发GCD(2)-dispatch_semaphore_t信号量计数器
思考:现在有多个线程异步执行,我们想要同时最多只能执行2个或n个,该怎么办? dispatch_semaphore_t 看代码解析: NSLog(@"开始"); dispatch_ ...
- Expo大作战(三十五)--expo sdk api之Location!
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- (后端)org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1,actual 0
两种方案: 用queryForList方法替换queryForObject或者queryForMap,因为这两个方法必须要有值,不能为空. 把这个异常捕获,用try/catch. 这个查询的结果是nu ...
- Git 学习一
刚刚接触git,学习现骨干操作并记录一下过程中的小问题(Windows下) 1.新建git目录 创建一个目录,使用命令 git init 2.添加文件 git add a.txt 3.提交文件 g ...
- UML类图关系图解
一.类结构 在类的UML图中,使用长方形描述一个类的主要构成,长方形垂直地分为三层,以此放置类的名称.属性和方法. 其中, 一般类的类名用正常字体粗体表示,如上图:抽象类名用斜体字粗体,如User:接 ...
- Ubuntu16下配置支持Windows访问的samba共享
一.安装Ubuntu samba服务器 $ sudo apt-get install samba $ sudo apt-get install smbclient # Linux客户端测试用 二.创建 ...