【THUWC 2017】在美妙的数学王国中畅游
数学王国里有n座城市,每座城市有三个参数\(f\),\(a\),\(b\),一个智商为\(x\)的人经过一座城市的获益\(f(x)\)是
若\(f=1\),则\(f(x)=\sin(ax+b)\);
若\(f=2\),则\(f(x)=e^{ax+b}\);
若\(f=3\),则\(f(x)=ax+b\);
会发生如下四种事件:
1、有两个城市之间新建了道路;
2、有两个城市之间的道路被摧毁了;
3、城市i的三个参数被修改了;
4、求智商为x的人从u走到v的获益总和。
保证任何时候图是一个森林。
题解
这是一道数学题
如果每座城市的\(f\)都是\(3\)你会做吗?
很简单,LCT维护一下路径上的\(\sum a,\sum b\)即可。
可见我们维护出来的就是函数的一次项系数和常系数。
所以说,如果我告诉你每座城市都是一个不超过13项的多项式函数,你应该不会还不知道怎么做了吧。
但显然这\(\sin(ax+b)\)啊,什么\(e^{ax+b}\)啊,这都是些什么鬼。
但如果我可以把它们展开成多项式呢?
根据泰勒公式,我们有
\]
其中\(f^{(i)}(x)\)表示函数\(f(x)\)的\(i\)阶导。
上式是一个近似式,近似度随\(n\)的取值而不断递增。要精确到题目要求的1e-7的话\(n\)只要取12,13就可以了。
数学小课堂——关于指数函数、三角函数、复活(雾)函数的求导
指数函数的求导
\]
(\(\ln a\)代表取自然对数)。
特殊的,
\]
三角函数的求导
\]
\]
\]
\]
(所以说是循环四个,周期!)
复合函数
\]
放到这道题里面去
\]
\]
\]
以此类推
\]
一次函数就不说了
然后这题就做完了
code
upt 18-08-07 : 更新了一份代码,现在\(BZ\)能过了虽然是在最后一版
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int N = 100005;
const int M = 16;
int n,m,fa[N],ch[2][N],rev[N],f[N],Stack[N],top;
double jc[M],sum[M][N],a[N],b[N];
char type[N],s[N];
bool son(int x){
return ch[1][fa[x]]==x;
}
bool isroot(int x){
return ch[0][fa[x]]!=x&&ch[1][fa[x]]!=x;
}
void reverse(int x){
if (!x) return;
swap(ch[0][x],ch[1][x]);rev[x]^=1;
}
void pushup(int x){
for (int i=0;i<M;++i)
sum[i][x]=sum[i][ch[0][x]]+sum[i][ch[1][x]];
if (f[x]==1){
double val=1,Sin=sin(b[x]),Cos=cos(b[x]);
for (int i=0;i<M;i+=4){
sum[i][x]+=Sin*val;val*=a[x];
sum[i+1][x]+=Cos*val;val*=a[x];
sum[i+2][x]-=Sin*val;val*=a[x];
sum[i+3][x]-=Cos*val;val*=a[x];
}
}
if (f[x]==2){
double val=exp(b[x]);sum[0][x]+=val;
for (int i=1;i<M;++i)
val*=a[x],sum[i][x]+=val;
}
if (f[x]==3)
sum[0][x]+=b[x],sum[1][x]+=a[x];
}
void pushdown(int x){
if (!rev[x]) return;
reverse(ch[0][x]);reverse(ch[1][x]);rev[x]=0;
}
void rotate(int x){
int y=fa[x],z=fa[y],c=son(x);
ch[c][y]=ch[c^1][x];if (ch[c][y]) fa[ch[c][y]]=y;
fa[x]=z;if (!isroot(y)) ch[son(y)][z]=x;
ch[c^1][x]=y;fa[y]=x;pushup(y);
}
void splay(int x){
Stack[++top]=x;
for (int i=x;!isroot(i);i=fa[i])
Stack[++top]=fa[i];
while (top) pushdown(Stack[top--]);
for (int y=fa[x];!isroot(x);rotate(x),y=fa[x])
if (!isroot(y)) son(x)^son(y)?rotate(x):rotate(y);
pushup(x);
}
void access(int x){
for (int y=0;x;y=x,x=fa[x])
splay(x),ch[1][x]=y,pushup(x);
}
void makeroot(int x){
access(x);splay(x);reverse(x);
}
int findroot(int x){
access(x);splay(x);
while(ch[0][x])x=ch[0][x];
splay(x);return x;
}
void split(int x,int y){
makeroot(x);access(y);splay(y);
}
void link(int x,int y){
makeroot(x);fa[x]=y;
}
void cut(int x,int y){
split(x,y);ch[0][y]=fa[x]=0;
}
int main(){
// freopen("math.in","r",stdin);
// freopen("math.out","w",stdout);
jc[0]=1;
for (int i=1;i<M;++i)
jc[i]=jc[i-1]*i;
scanf("%d %d %s",&n,&m,type);
for (int i=1;i<=n;++i)
scanf("%d %lf %lf",&f[i],&a[i],&b[i]);
while (m--){
int u,v,ff;
double aa,bb,x,IQ,ans;
scanf("%s",s);
if (s[0]=='a'){
scanf("%d %d",&u,&v);
++u;++v;link(u,v);
}
if (s[0]=='d'){
scanf("%d %d",&u,&v);
++u;++v;cut(u,v);
}
if (s[0]=='m'){
scanf("%d %d %lf %lf",&u,&ff,&aa,&bb);
++u;makeroot(u);
f[u]=ff;a[u]=aa;b[u]=bb;
pushup(u);
}
if (s[0]=='t'){
scanf("%d %d %lf",&u,&v,&IQ);x=1;
++u;++v;
if (findroot(u)^findroot(v)) {puts("unreachable");continue;}
split(u,v);
ans=0;
for (int i=0;i<M;++i)
ans+=sum[i][v]*x/jc[i],x*=IQ;
printf("%.8e\n",ans);
}
}
return 0;
}
【THUWC 2017】在美妙的数学王国中畅游的更多相关文章
- 【BZOJ5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT
[BZOJ5020][THUWC 2017]在美妙的数学王国中畅游 Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数 ...
- BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)
Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言: ...
- bzoj5020: [THUWC 2017]在美妙的数学王国中畅游
Description 数学王国中,每个人的智商可以用一个属于 [0,1]的实数表示.数学王国中有 n 个城市,编号从 0 到 n−1 ,这些城市由若干座魔法桥连接.每个城市的中心都有一个魔法球,每个 ...
- 解题:THUWC 2017 在美妙的数学王国中畅游
题面 _“数字和数学规律主宰着这个世界.”_ 在 @i207M 帮助下折腾了半天终于搞懂了导数和泰勒展开,引用某学长在考场上的感受:感觉整个人都泰勒展开了 显然是个奇奇怪怪的东西套上LCT,发现直接维 ...
- [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 ...
- 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 你需要维护一些操作:连边.删边.修改某个点的初等函数.询问某条树链上所有函数带入某个值后权值和或不 ...
- bzoj 5020: [THUWC 2017]在美妙的数学王国中畅游【泰勒展开+LCT】
参考:https://www.cnblogs.com/CQzhangyu/p/7500328.html --其实理解了泰勒展开之后就是水题呢可是我还是用了两天时间来搞懂啊 泰勒展开是到正无穷的,但是因 ...
- bzoj5020 & loj2289 [THUWC 2017]在美妙的数学王国中畅游 LCT + 泰勒展开
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5020 https://loj.ac/problem/2289 题解 这个 appear 和 d ...
随机推荐
- docker dead but pid file exists
CentOS 6安装docker 报docker dead but pid file exists 执行 yum install epel-release yum install docker-io ...
- Quartz.NET 3.0 正式发布
Quartz.NET是一个强大.开源.轻量的作业调度框架,你能够用它来为执行一个作业而创建简单的或复杂的作业调度.它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等.在2017 ...
- 解决PhpStorm卡顿的问题
以前的开发一直使用phpstorm.可谓是情有独钟,但是发现随着开发phpStorm逐渐变得卡顿,也试过其他的编译器,但是都感觉没有PhpSrom好用,网上百度了一下,看到不一样的回答.只要修改两个J ...
- 03-PHP-memcached
[安装memcached] [安装 libevent] $ tar zxvf libevent-2.0.20-stable.tar.gz $ cd libevent-2.0.20-stable/ $ ...
- 网页版仿Excel效果组件--handsontable拓展运用
引言(祝看官们新年万事大吉) 前段时间项目需要实现网页版的excel表格功能,瞬间就想到了handsontable,为什么呢?理由如下:该UI组件功能齐全多样,展示效果也更贴近bootstrap风格, ...
- Spring-Security+Freemarker 开启跨域请求伪造防护功能
CSRF简介--摘抄自<Spring实战(第4版)> 我们可以回忆一下,当一个POST请求提交到"/spittles"上时,SpittleController ...
- MysqL主从复制_模式之GTID复制
基于GTID的复制是从Mysql5.6开始支持的一种新的复制方式,此方式与传统基于日志的方式存在很大的差异,在原来的基于日志的复制中,从服务器连接到主服务器并告诉主服务器要从哪个二进制日志的偏移量开始 ...
- windows 如何编译 Openssl ?
windows 如何编译 Openssl ? 编译环境 VS2015 Openssl 1.0.2 ActivePerl 5.24.3 x64 编译步骤 安装 ActivePerl 期间,勾选添加至环境 ...
- 浙江省赛 C What Kind of Friends Are You?
思路:一开始考虑n个朋友可以有c种可能,根据回答的问题,如果是yes那么可以确定一些朋友的范围,将原本不在这个范围内的删除即可:如果是"no",说明这些朋友都应该被删除,那么最后看 ...
- C. Polycarp at the Radio
这题题意不太好理解,但是可以通过样例推.主要考察思维的全面性,注意把b[m]特殊处理下. AC代码: #include<cstdio> #include<cstring> co ...