[THUWC2017]在美妙的数学王国中畅游
e和sin信息不能直接合并
泰勒展开,大于21次太小,认为是0,保留前21次多项式即可
然后就把e,sin ,kx+b都变成多项式了,pushup合并
上LCT
// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define ld double
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');} namespace Miracle{
const int N=1e5+;
const int K=;
int n,m;
struct Poly{
ld a[K];
Poly(){memset(a,,sizeof a);}
il ld &operator[](const int &x){return a[x];}
il const ld &operator[](const int &x) const {return a[x];}
Poly friend operator +(const Poly &a,const Poly &b){
Poly c;
for(reg i=;i<K;++i){
c.a[i]=a.a[i]+b.a[i];
}
return c;
}
ld calc(ld x){
ld tmp=,ret=;
for(reg i=;i<K;++i){
ret=ret+a[i]*tmp;
tmp=tmp*x;
}
return ret;
}
};
int C[][];
ld jie[K],ma[K],mb[K];
Poly exp(double a,double b){
Poly ret;
ma[]=;mb[]=;
for(reg i=;i<K;++i){
ma[i]=ma[i-]*a;
mb[i]=mb[i-]*b;
}
for(reg i=;i<K;++i){
for(reg j=;j<=i;++j){
ret.a[j]+=C[i][j]*ma[j]*mb[i-j]*jie[i];
}
}
return ret;
}
Poly sin(double a,double b){
Poly ret;
ma[]=;mb[]=;
for(reg i=;i<K;++i){
ma[i]=ma[i-]*a;
mb[i]=mb[i-]*b;
}
for(reg i=;i<K;i+=){
for(reg j=;j<=i;++j){
if(((i-)/)&){
ret.a[j]-=C[i][j]*ma[j]*mb[i-j]*jie[i];
}else{
ret.a[j]+=C[i][j]*ma[j]*mb[i-j]*jie[i];
}
}
}
return ret;
}
Poly init(int typ,double a,double b){
if(typ==) return sin(a,b);
if(typ==) return exp(a,b);
Poly ret;
ret.a[]=a;
ret.a[]=b;
return ret;
}
struct node{
int ch[],fa;
int rev;
Poly f,sum;
}t[N];
#define ls t[x].ch[0]
#define rs t[x].ch[1]
void pushup(int x){
if(!x) return;
t[x].sum=t[ls].sum+t[rs].sum+t[x].f;
}
bool nrt(int x){
return t[t[x].fa].ch[]==x||t[t[x].fa].ch[]==x;
}
void rev(int x){
t[x].rev^=;
swap(ls,rs);
}
void pushdown(int x){
if(t[x].rev){
rev(ls);rev(rs);
t[x].rev=;
}
}
void rotate(int x){
int y=t[x].fa,d=t[y].ch[]==x;
t[t[y].ch[d]=t[x].ch[!d]].fa=y;
if(nrt(y)) t[t[x].fa=t[y].fa].ch[t[t[y].fa].ch[]==y]=x;
else t[x].fa=t[y].fa;
t[t[x].ch[!d]=y].fa=x;
pushup(y);
}
int sta[N];
void splay(int x){
int y=x,z=;
sta[++z]=x;
while(nrt(y)) y=t[y].fa,sta[++z]=y;
while(z) pushdown(sta[z--]);
while(nrt(x)){
y=t[x].fa,z=t[y].fa;
if(nrt(y)){
rotate((t[y].ch[]==x)==(t[z].ch[]==y)?y:x);
}
rotate(x);
}
pushup(x);
}
void access(int x){
for(reg y=;x;y=x,x=t[x].fa){
splay(x);t[x].ch[]=y;pushup(x);
}
}
void makert(int x){
access(x);splay(x);rev(x);
}
void link(int x,int y){
makert(x);t[x].fa=y;
}
void split(int x,int y){
makert(x);access(y);splay(y);
}
void cut(int x,int y){
split(x,y);
t[y].ch[]=t[x].fa=;
pushup(y);
}
int findrt(int x){
access(x);splay(x);
while(ls) x=ls;
splay(x);
return x;
}
ld query(int x,int y,ld v){
split(x,y);
return t[y].sum.calc(v);
}
char s[];
int main(){
char haha[];
rd(n);rd(m);scanf("%s",haha+); int typ;
ld a,b;
int x,y;
C[][]=;
for(reg i=;i<=K;++i){
C[i][]=;
for(reg j=;j<=K;++j){
C[i][j]=C[i-][j]+C[i-][j-];
}
}
jie[]=jie[]=;
for(reg i=;i<=K;++i){
jie[i]=jie[i-]/i;
}
for(reg i=;i<=n;++i){
rd(typ);scanf("%lf%lf",&a,&b);
t[i].f=init(typ,a,b);
pushup(i);
}
while(m--){
scanf("%s",s+);
if(s[]=='a'){
rd(x);rd(y);
++x;++y;
link(x,y);
}else if(s[]=='d'){
rd(x);rd(y);
++x;++y;
cut(x,y);
}else if(s[]=='m'){
rd(x);rd(typ);scanf("%lf%lf",&a,&b);
++x;
access(x);splay(x);
t[x].f=init(typ,a,b);
pushup(x);
}else {
// cout<<" tr "<<endl;
rd(x);rd(y);scanf("%lf",&a);
++x;++y;
// cout<<x<<" "<<y<<" a "<<a<<endl;
if(findrt(x)==findrt(y)) printf("%.10lf\n",query(x,y,a));
else puts("unreachable");
}
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/4/11 20:11:40
*/
多项式可以支持合并
[THUWC2017]在美妙的数学王国中畅游的更多相关文章
- [BZOJ5020][THUWC2017]在美妙的数学王国中畅游(LCT)
5020: [THUWC 2017]在美妙的数学王国中畅游 Time Limit: 80 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 323 ...
- Luogu4546 THUWC2017 在美妙的数学王国中畅游 LCT、泰勒展开
传送门 题意:反正就是一堆操作 LCT总是和玄学东西放在一起我们不妨令$x_0=0.5$(其实取什么都是一样的,但是最好取在$[0,1]$的范围内),将其代入给出的式子,我们得到的$f(x)$的式子就 ...
- [THUWC2017]在美妙的数学王国中畅游 LCT+泰勒展开+求导
p.s. 复合函数求导时千万不能先带值,再求导. 一定要先将符合函数按照求导的规则展开,再带值. 设 $f(x)=g(h(x))$,则对 $f(x)$ 求导: $f'(x)=h'(x)g'(h(x)) ...
- [LOJ2289][THUWC2017]在美妙的数学王国中畅游:Link-Cut Tree+泰勒展开
分析 又有毒瘤出题人把数学题出在树上了. 根据泰勒展开,有: \[e^x=1+\frac{1}{1!}x+\frac{1}{2!}x^2+\frac{1}{3!}x^3+...\] \[sin(x)= ...
- 题解 洛谷 P4546 【[THUWC2017]在美妙的数学王国中畅游】
首先发现有连边和删边的操作,所以我们肯定要用\(LCT\)来进行维护. 接下来考虑如何进行\(LCT\)上的信息合并. \(f=1\),则函数为\(f(x)=sin(ax+b)\) \(f=2\),则 ...
- Luogu P4546 [THUWC2017]在美妙的数学王国中畅游
题意 题意奇奇怪怪,这里就不写了. \(\texttt{Data Range:}1\leq n\leq 10^5,1\leq m\leq 2\times 10^5\) 题解 为什么你们都是卡在数学方面 ...
- 洛谷P4546 [THUWC2017]在美妙的数学王国中畅游 [LCT,泰勒展开]
传送门 毒瘤出题人卡精度-- 思路 看到森林里加边删边,容易想到LCT. 然而LCT上似乎很难实现往一条链里代一个数进去求和,怎么办呢? 善良的出题人在下方给了提示:把奇怪的函数泰勒展开搞成多项式,就 ...
- P4546 [THUWC2017]在美妙的数学王国中畅游
如果只有第3个操作,那么这就是个sd题,随便lct搞搞就过去了 然后就是一个神仙东西 taylor公式 我不会,看gsy博客https://www.cnblogs.com/zhoushuyu/p/81 ...
- BZOJ5020 THUWC2017在美妙的数学王国中畅游(LCT)
明摆着的LCT,问题在于如何维护答案.首先注意到给出的泰勒展开式,并且所给函数求导非常方便,肯定要用上这玩意.容易想到展开好多次达到精度要求后忽略余项.因为x∈[0,1]而精度又与|x-x0|有关,当 ...
随机推荐
- javascript深入浅出——学习笔记(六种数据类型和隐式转换)
在慕课之前学过JS深入浅出,最近发现很多东西都记不太清楚了,再复习一遍好了,感觉这个课程真的超级棒的,做做笔记,再添加一些学习内容
- @PathVariable
@PathVariable是用来对指定请求的URL路径里面的变量 eg: Java代码 @RequestMapping(value = "form/{id}/apply", met ...
- python爬虫之pandas
一.简介: Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模 ...
- java float double bigdecimal
java 有 float,double,BigDecimal 三种,前两者会损失精度,最后一个是专门用于高精度计算的大数类型,但是会损失性能.如果用于金融场合且小数位并不多的时候,可以考虑 BigDe ...
- 使用chcache 缓存
在项目里碰到了表单提交和ajax访问后台取到的request对象不是同一个对象,所以不能够资源共享,问了大神决定配置一个缓存来处理这个问题. 引用jar :ehcache-core-2.5.2.jar ...
- css的特性
一.继承性: 继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代. /* 不具有继承性的css样式: */p{border:1px solid red;} 二.特殊性(优先 ...
- fftshift
说明:本文为转载http://blog.csdn.net/myathappy/article/details/51344618 Matlab fftshift 详解 一.实信号情况 因为实信号以fs为 ...
- hdu-2328(暴力枚举+kmp)
题意:给你n个字符串,问你这n个串的最长公共子串 解题思路:暴力枚举任意一个字符串的所有子串,然后暴力匹配,和hdu1238差不多的思路吧,这里用string解决的: 代码: #include< ...
- Nginx CGI反向代理对照
陶辉104 CGI是什么? CGI全称是“通用网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具
- 22Java之JDBCTemplate总结
写在前面:这里总结4种方式来操作数据库(SE阶段) 一.JDBC JDBC有关的类:都在java.sql 和 javax.sql 包下. 1.数据准备 ...