BZOJ5020 [THUWC 2017]在美妙的数学王国中畅游LCT
题意很明显是要用LCT来维护森林 难点在于如何处理函数之间的关系 我们可以根据题目给的提示关于泰勒展开的式子 将三种函数变成泰勒展开的形式
因为\(x∈[0,1]\) 所以我们可以将三个函数在\(x_0=0\)处展开
\(sin(ax+b)=sin(b)+\frac{acos(b)x}{1!}+\frac{-a^2sin(b)x^2}{2!}+\frac{-a^3cos(b)x^3}{3!}+⋯\)
\(e^{ax+b}=e^b+\frac{ae^bx}{1!}+\frac{a^2e^bx^2}{2!}+\frac{a^3e^bx^3}{3!}+⋯\)
\(ax+b=b+\frac{ax}{1!}+\frac{0x^2}{2!}+\frac{0x^3}{3!}+⋯\)
\(splay\)合并时暴力合并每一位 我处理到\(x^{13}\)就可以\(AC\)了
#include<bits/stdc++.h>
using namespace std;
#define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
#define pa pair<int,int>
#define mod 1000000007
#define ll long long
#define mk make_pair
#define pb push_back
#define fi fisrt
#define se second
#define cl(x) memset(x,0,sizeof x)
#ifdef Devil_Gary
#define bug(x) cout<<(#x)<<" "<<(x)<<endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define bug(x)
#define debug(...)
#endif
const int INF = 0x7fffffff;
const int N=1e5+5;
const int D=13;
inline int read(){
int x=0,rev=0,ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')rev=1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return rev?-x:x;
}
int n,m,cnt,c[N][2],fa[N],q[N],rev[N];
char ss[D];
double tmp[4],fac[D];
struct data{
int type;
double a,b,T[D],v[D];
void calc(){
if(type==1){
double ga=a;
T[0]=tmp[0]=sin(b),tmp[1]=cos(b),tmp[2]=-tmp[0],tmp[3]=-tmp[1];
for(int i=1;i<D;i++) T[i]=tmp[i%4]*ga,ga*=a;
}
else if(type==2){
double eb=exp(b),ga=a;
T[0]=eb;
for(int i=1;i<D;i++) T[i]=eb*ga,ga*=a;
}
else {
T[0]=b,T[1]=a;
for(int i=2;i<D;i++) T[i]=0;
}
}
}s[N];
void update(int x){
for(int i=0;i<D;i++) s[x].v[i]=s[c[x][0]].v[i]+s[c[x][1]].v[i]+s[x].T[i];
}
void pushdown(int x){
int l=c[x][0],r=c[x][1];
if(rev[x]){
rev[x]^=1,rev[l]^=1,rev[r]^=1;
swap(c[x][0],c[x][1]);
}
}
bool isroot(int x){
return c[fa[x]][0]!=x&&c[fa[x]][1]!=x;
}
void rotate(int x){
int y=fa[x],z=fa[y],l=c[y][1]==x,r=l^1;
if(!isroot(y)) c[z][c[z][1]==y]=x;
fa[x]=z,fa[y]=x,fa[c[x][r]]=y;
c[y][l]=c[x][r],c[x][r]=y;
update(y),update(x);
}
void splay(int x){
cnt=0,q[++cnt]=x;
for(int i=x;!isroot(i);i=fa[i]) q[++cnt]=fa[i];
for(int i=cnt;i;--i) pushdown(q[i]);
while(!isroot(x)){
int y=fa[x],z=fa[y];
if(!isroot(y)){
if(c[y][0]==x^c[z][0]==y) rotate(x);
else rotate(y);
}
rotate(x);
}
}
void access(int x){
for(int t=0;x;t=x,x=fa[x])
splay(x),c[x][1]=t,update(x);
}
void makeroot(int x){
access(x),splay(x),rev[x]^=1;
}
int find(int x){
access(x),splay(x);while(c[x][0]) x=c[x][0];
return x;
}
void cut(int x,int y){
makeroot(x),access(y),splay(y);
if(c[y][0]==x) c[y][0]=fa[x]=0;
}
void link(int x,int y){
makeroot(x),fa[x]=y;
}
int main(){
#ifdef Devil_Gary
freopen("in.txt","r",stdin);
#endif
n=read(),m=read(),scanf("%s",ss),fac[0]=1;
for(int i=1;i<D;i++) fac[i]=fac[i-1]*i;
for(int i=1;i<=n;i++) s[i].type=read(),scanf("%lf%lf",&s[i].a,&s[i].b),s[i].calc();
for(int i=1;i<=m;i++){
int u,v,c;double x,y,ans;
scanf("%s",ss);
if(ss[0]=='a'){
u=read()+1,v=read()+1,link(u,v);
}
else if(ss[0]=='d'){
u=read()+1,v=read()+1,cut(u,v);
}
else if(ss[0]=='m'){
c=read()+1,splay(c),s[c].type=read(),scanf("%lf %lf",&s[c].a,&s[c].b);
s[c].calc(),update(c);
}
else{
u=read()+1,v=read()+1,scanf("%lf",&x);
if(find(u)!=find(v)){
printf("unreachable\n");
continue;
}
makeroot(u),access(v),splay(v),y=x,ans=s[v].v[0];
for(int j=1;j<D;j++,y*=x) ans+=y*s[v].v[j]/fac[j];
printf("%.8le\n",ans);
}
}
}
BZOJ5020 [THUWC 2017]在美妙的数学王国中畅游LCT的更多相关文章
- BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)
Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言: ...
- bzoj5020: [THUWC 2017]在美妙的数学王国中畅游
Description 数学王国中,每个人的智商可以用一个属于 [0,1]的实数表示.数学王国中有 n 个城市,编号从 0 到 n−1 ,这些城市由若干座魔法桥连接.每个城市的中心都有一个魔法球,每个 ...
- bzoj5020 & loj2289 [THUWC 2017]在美妙的数学王国中畅游 LCT + 泰勒展开
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5020 https://loj.ac/problem/2289 题解 这个 appear 和 d ...
- bzoj 5020(洛谷4546) [THUWC 2017]在美妙的数学王国中畅游——LCT+泰勒展开
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5020 https://www.luogu.org/problemnew/show/P4546 ...
- loj2289 [THUWC 2017]在美妙的数学王国中畅游(LCT+Taylor展开)
link 题目大意: 你需要维护一个树 每个点都有个sin(ax+b)或exp(ax+b)或ax+b 你需要维护一些操作:连边.删边.修改某个点的初等函数.询问某条树链上所有函数带入某个值后权值和或不 ...
- 【BZOJ5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT
[BZOJ5020][THUWC 2017]在美妙的数学王国中畅游 Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数 ...
- [THUWC 2017]在美妙的数学王国中畅游
bzoj5020 \[答案误差只要小于 10^{-7}\] 题解 Taylor展开式: \[若f(x)的n阶导数在[a, b]内连续,则f(x)在x_{0}\in[a, b]可表示为\] \[f(x) ...
- 解题:THUWC 2017 在美妙的数学王国中畅游
题面 _“数字和数学规律主宰着这个世界.”_ 在 @i207M 帮助下折腾了半天终于搞懂了导数和泰勒展开,引用某学长在考场上的感受:感觉整个人都泰勒展开了 显然是个奇奇怪怪的东西套上LCT,发现直接维 ...
- bzoj 5020: [THUWC 2017]在美妙的数学王国中畅游【泰勒展开+LCT】
参考:https://www.cnblogs.com/CQzhangyu/p/7500328.html --其实理解了泰勒展开之后就是水题呢可是我还是用了两天时间来搞懂啊 泰勒展开是到正无穷的,但是因 ...
随机推荐
- Struts2_day03
一.上节回顾 1 在action获取表单提交数据 (1)使用ActionContext类获取 (2)使用ServletActionContext类获取 (3)接口注入 2 结果配置 (1)全局结果页面 ...
- 兼容 IE6+ 获取图片大小
昨天说了 HTML5 的file对象可以获取到文件的 文件名,文件大小,文件类型,最后一次修改日期.其实 IE6-9 也可以变向的获取到,虽然没那么方便,但至少可以取到.来看例子吧: <!doc ...
- [R语言]关联规则1---不考虑items之间的时序关系
本文介绍的是关联规则,分为两部分:第一部分是---不考虑用户购买的items之间严格的时序关系,每个用户有一个“购物篮”,查找其中的关联规则.第二部分--- 考虑items之间的严格的时序关系来分析用 ...
- Linux - 用户操作
常用命令 users # 显示所有的登录用户 groups # 列出当前用户和他所属的组 who -q # 显示所有的登录用户 groupadd # 添加组 useradd user # 建立用户 p ...
- yii2框架目录
框架目录结构 [目录] backend——后台web程序 common——公共的文件 console——控制台程序 environments——环境配置 frontend——前台web程序 [文件] ...
- 如何得到Slave应用relay-log的时间
官方社区版MySQL 5.7.19 基于Row+Position搭建的一主一从异步复制结构:Master->{Slave} ROLE HOSTNAME BASEDIR DATADIR IP PO ...
- vim助手
移动光标 hjkl 2w 向前移动两个单词 3e 向前移动到第 3 个单词的末尾 0 移动到行首 $ 当前行的末尾 gg 文件第一行 G 文件最后一行 行号+G 指定行 <ctrl>+o ...
- arm GIC介绍之四【转】
转自:https://blog.csdn.net/sunsissy/article/details/73882718 GIC是ARM体系中重要的组件,在认识到GIC的组成和功能之后,了解到IRQ的大致 ...
- MySQL5.6快速安装【转】
下载MySQL5.6 访问MySQL官网 点击Downloads,然后选择Archives 选择MySQL Community Server 选择合适版本和平台 选择下载预先编译好的二进制安装包 将下 ...
- linux终端自定义设置
2014年1月4日 19:21:16 1. ls命令显示文件列表时不再花花绿绿 vi ~/.bashrc alias ls='ls -a --color=never' alias ll='ls -lh ...