题意很明显是要用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\)了
#includeusing namespace std;#define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}#define pa pair #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)< '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