多校联测13 可

题目大意

k k k个在 [ 0 , x ] [0,x] [0,x]范围内的随机整数 a 1 , a 2 , … , a k a_1,a_2,\dots,a_k a1,a2,,ak,设 f ( x ) f(x) f(x)表示 x x x的所有非零位的积,例如 f ( 0 ) = 1 , f ( 1145141919810 ) = 1 × 1 × 4 × 5 × 1 × 4 × 1 × 9 × 1 × 9 × 8 × 1 f(0)=1,f(1145141919810)=1\times 1\times 4\times 5\times 1\times 4\times 1\times 9\times 1\times 9\times 8\times 1 f(0)=1,f(1145141919810)=1×1×4×5×1×4×1×9×1×9×8×1。求 f ( ∑ i = 1 k a i ) f(\sum\limits_{i=1}^ka_i) f(i=1kai)的期望值,输出答案乘 ( x + 1 ) k (x+1)^k (x+1)k后的值。

1 ≤ x ≤ 1 0 1 0 4 , 1 ≤ k ≤ 20 , x + 1 ≢ 0 ( m o d 1 0 9 + 7 ) 1\leq x\leq 10^{10^4},1\leq k\leq 20,x+1\not\equiv0\pmod{10^9+7} 1x10104,1k20,x+10(mod109+7)

时间限制 6000 m s 6000ms 6000ms


题解

题意即计算在所有情况下的 f ( ∑ i = 1 k a i ) f(\sum\limits_{i=1}^ka_i) f(i=1kai)的总和。

考虑计算 ∑ i = 1 k a i = n \sum\limits_{i=1}^ka_i=n i=1kai=n时的方案数 g ( n ) g(n) g(n)

g ( n ) = ∑ i = 0 k ( − 1 ) i × ( k i ) × ( n − i ( x + 1 ) + k − 1 k − 1 ) g(n)=\sum\limits_{i=0}^k(-1)^i\times \binom ki\times \binom{n-i(x+1)+k-1}{k-1} g(n)=i=0k(1)i×(ik)×(k1ni(x+1)+k1)

这个式子是怎么得到的呢?运用容斥,钦定有 i i i个数是 ≥ x + 1 \geq x+1 x+1的,乘上不同的分配位置 ( k i ) \binom ki (ik)。后面是插板法,将 n − i ( x + 1 ) n-i(x+1) ni(x+1)分为 k k k个数,然后在对应的位置加上 x + 1 x+1 x+1,来保证钦定为 ≥ x + 1 \geq x+1 x+1的这些数分配到的值 ≥ x + 1 \geq x+1 x+1

注意,当 n > k x n>kx n>kx时,显然任意的 ∑ i = 1 k a i \sum\limits_{i=1}^ka_i i=1kai都不等于 n n n,所以此时 g ( n ) = 0 g(n)=0 g(n)=0

得到了 g ( n ) g(n) g(n),我们就可以推答案了。答案为

∑ i = 0 k x f ( i ) g ( i ) = ∑ i = 0 k x f ( i ) ∑ j = 0 k ( − 1 ) j ( k j ) ( i − j ( x + 1 ) + k − 1 k − 1 ) = ∑ j = 0 k ( − 1 ) j ( k j ) ∑ i = 0 k x f ( i ) × [ i − j ( x + 1 ) + k − 1 ] ! ( k − 1 ) ! [ i − j ( x + 1 ) ] ! = 1 ( k − 1 ) ! ∑ j = 0 k ( − 1 ) j ( k j ) ∑ i = 0 k x f ( i ) × [ i − j ( x + 1 ) ] k − 1 ‾ = 1 ( k − 1 ) ! ∑ j = 0 k ( − 1 ) j ( k j ) ∑ l = 0 k − 1 v j , l ∑ i = 0 k x f ( i ) i l \begin{aligned} \sum\limits_{i=0}^{kx}f(i)g(i)&=\sum\limits_{i=0}^{kx}f(i)\sum\limits_{j=0}^k(-1)^j\binom kj\binom{i-j(x+1)+k-1}{k-1} \\ &=\sum\limits_{j=0}^k(-1)^j\binom kj\sum\limits_{i=0}^{kx}f(i)\times \dfrac{[i-j(x+1)+k-1]!}{(k-1)![i-j(x+1)]!} \\ &=\dfrac{1}{(k-1)!}\sum\limits_{j=0}^k(-1)^j\binom kj\sum\limits_{i=0}^{kx}f(i)\times [i-j(x+1)]^{\underline{k-1}} \\ &=\dfrac{1}{(k-1)!}\sum\limits_{j=0}^k(-1)^j\binom kj\sum\limits_{l=0}^{k-1}v_{j,l}\sum\limits_{i=0}^{kx}f(i)i^l \end{aligned} i=0kxf(i)g(i)=i=0kxf(i)j=0k(1)j(jk)(k1ij(x+1)+k1)=j=0k(1)j(jk)i=0kxf(i)×(k1)![ij(x+1)]![ij(x+1)+k1]!=(k1)!1j=0k(1)j(jk)i=0kxf(i)×[ij(x+1)]k1=(k1)!1j=0k(1)j(jk)l=0k1vj,li=0kxf(i)il

其中 [ i − j ( x + 1 ) ] k − 1 ‾ [i-j(x+1)]^{\underline{k-1}} [ij(x+1)]k1为下降幂, n k ‾ = n ( n − 1 ) ⋯ ( n − k + 1 ) n^{\underline k}=n(n-1)\cdots(n-k+1) nk=n(n1)(nk+1)。最后一行的 v j , l v_{j,l} vj,l表示 [ i − j ( x + 1 ) ] k − 1 ‾ [i-j(x+1)]^{\underline{k-1}} [ij(x+1)]k1 i l i^l il的系数。,我们可以 O ( k 3 ) O(k^3) O(k3)求出所有 v j , l v_{j,l} vj,l

那么,我们只需要求出 ∑ i = 0 t f ( i ) i l \sum\limits_{i=0}^tf(i)i^l i=0tf(i)il,我们可以用数位 D P DP DP来求。从大到小枚举当前这一位的取值,设当前是第 n o w now now位,取值为 x x x。设 d p n o w , j = ∑ i f ( i ) i j dp_{now,j}=\sum\limits_i f(i)i^j dpnow,j=if(i)ij,其中 i i i满足 i i i的后 n o w − 1 now-1 now1位都为 0 0 0。那么,

d p n o w , t = ∑ i ∑ x f ( i + x × 1 0 n o w ) × ( i + x × 1 0 n o w ) t = ∑ i ∑ x f ( i ) × f ( x ) × ∑ d = 0 t ( t d ) i d ( x × 1 0 n o w ) t − d = ∑ d = 0 t ( t d ) × ( ∑ i f ( i ) i d ) × [ ∑ x f ( x ) × ( x × 1 0 n o w ) t − d ] = ∑ d = 0 t ( t d ) d p n o w + 1 , d × [ ∑ x f ( x ) × ( x × 1 0 n o w ) t − d ] \begin{aligned} dp_{now,t}&=\sum\limits_i\sum\limits_xf(i+x\times 10^{now})\times (i+x\times 10^{now})^t \\ &=\sum\limits_i\sum\limits_xf(i)\times f(x)\times \sum\limits_{d=0}^t\binom tdi^d(x\times 10^{now})^{t-d} \\ &=\sum\limits_{d=0}^t\binom td\times (\sum_if(i)i^d)\times [\sum_xf(x)\times (x\times 10^{now})^{t-d}] \\ &=\sum\limits_{d=0}^t\binom tddp_{now+1,d}\times [\sum_xf(x)\times (x\times 10^{now})^{t-d}] \end{aligned} dpnow,t=ixf(i+x×10now)×(i+x×10now)t=ixf(i)×f(x)×d=0t(dt)id(x×10now)td=d=0t(dt)×(if(i)id)×[xf(x)×(x×10now)td]=d=0t(dt)dpnow+1,d×[xf(x)×(x×10now)td]

这样,我们就可以用 d p n o w + 1 , d dp_{now+1,d} dpnow+1,d来求 d p n o w , t dp_{now,t} dpnow,t了。

观察 ∑ i = 0 k x f ( i ) g ( i ) \sum\limits_{i=0}^{kx}f(i)g(i) i=0kxf(i)g(i)这个式子,在上面得知 i > k x 时 i>kx时 i>kx g ( i ) = 0 g(i)=0 g(i)=0,所以增大 i i i的上限并不会增加这个式子的结果。为了方便计算,我们将 i i i的上限定为 1 0 w + 3 − 1 10^{w+3}-1 10w+31(其中 w w w x x x的位数),显然 1 0 w + 3 − 1 ≥ k x 10^{w+3}-1\geq kx 10w+31kx。这样的话,每一位数都可以取 0 0 0 9 9 9中的每一个数。

不过,还有一个问题。在上面得到下降幂的部分,当 i < j ( x + 1 ) i<j(x+1) i<j(x+1)时, ( i − j ( x + 1 ) + k − 1 k − 1 ) \binom{i-j(x+1)+k-1}{k-1} (k1ij(x+1)+k1)应该等于 0 0 0,但变为下降幂之后却变为负数。不过这个很好处理,只要将 i i i的下限定为 j ( x + 1 ) j(x+1) j(x+1)即可避免这种情况,而且不影响结果。

那么,就变为求 ∑ i = j ( x + 1 ) 1 0 w + 3 − 1 f ( i ) i l \sum\limits_{i=j(x+1)}^{10^{w+3}-1}f(i)i^l i=j(x+1)10w+31f(i)il了。其实求法是类似的,只是要将 d p n o w , t dp_{now,t} dpnow,t拆成两个数组 f n o w , t f_{now,t} fnow,t g n o w , t g_{now,t} gnow,t,用 f n o w , t f_{now,t} fnow,t存当前已经枚举的数的各位都等于 j ( x + 1 ) j(x+1) j(x+1)的各位,用 g n o w , t g_{now,t} gnow,t存当前已经枚举的数的各位都大于 j ( x + 1 ) j(x+1) j(x+1)的各位,再进行 D P DP DP,即可保证 i ≥ j ( x + 1 ) i\geq j(x+1) ij(x+1)。转移式如下:

g n o w , t = ∑ d = 0 t ( t d ) g n o w + 1 , d × [ ∑ x = 0 9 f ( x ) × ( x × 1 0 n o w ) t − d ] + ∑ d = 0 t ( t d ) f n o w + 1 , d × [ ∑ x = A 9 f ( x ) × ( x × 1 0 n o w ) t − d ] g_{now,t}=\sum\limits_{d=0}^t\binom tdg_{now+1,d}\times [\sum_{x=0}^9f(x)\times (x\times 10^{now})^{t-d}]+\sum\limits_{d=0}^t\binom tdf_{now+1,d}\times [\sum_{x=A}^9f(x)\times (x\times 10^{now})^{t-d}] gnow,t=d=0t(dt)gnow+1,d×[x=09f(x)×(x×10now)td]+d=0t(dt)fnow+1,d×[x=A9f(x)×(x×10now)td]

f n o w , t = ∑ d = 0 t ( t d ) f n o w + 1 , d × [ f ( A ) × ( A × 1 0 n o w ) t − d ] f_{now,t}=\sum\limits_{d=0}^t\binom tdf_{now+1,d}\times [f(A)\times (A\times 10^{now})^{t-d}] fnow,t=d=0t(dt)fnow+1,d×[f(A)×(A×10now)td]

其中 A A A j ( x + 1 ) j(x+1) j(x+1)的从后往前的第 n o w now now位。

这些式子和上面的 d p n o w , t dp_{now,t} dpnow,t本质是一样的,只不过 f n o w , t f_{now,t} fnow,t的当前位只能填 A A A。为了保证 g n o w , t g_{now,t} gnow,t中算贡献的 i i i都大于 j ( x + 1 ) j(x+1) j(x+1),那分为两种情况:

  • i i i之前的位都比 j ( x + 1 ) j(x+1) j(x+1)大,则这一位无论是什么, i i i都比 j ( x + 1 ) j(x+1) j(x+1)大,所以可以任意填
  • i i i之前的位都等于 j ( x + 1 ) j(x+1) j(x+1),则这一位要填大于 A A A的数, i i i才能比 j ( x + 1 ) j(x+1) j(x+1)大,所以可以填 [ A + 1 , 9 ] [A+1,9] [A+1,9]中的数

为了可以这样转移, n o w now now要从大到小枚举(也就是从 i i i的高位到低位枚举),这就是为什么 n o w now now要从大到小枚举的原因。

c i , j = f ( i ) × ( i × 1 0 n o w ) j , d i , j = ∑ t = i 9 f ( i ) × ( i × 1 0 n o w ) j c_{i,j}=f(i)\times (i\times 10^{now})^j,d_{i,j}=\sum\limits_{t=i}^9f(i)\times (i\times 10^{now})^j ci,j=f(i)×(i×10now)j,di,j=t=i9f(i)×(i×10now)j,即 d i , j d_{i,j} di,j c i , j c_{i,j} ci,j的后缀和,我们可以提前求出 c i , j c_{i,j} ci,j d i , j d_{i,j} di,j,那么上面的 D P DP DP式变为

g n o w , t = ∑ d = 0 t ( t d ) g n o w + 1 , d × d 0 , t − d + ∑ d = 0 t ( t d ) f n o w + 1 , d × d A + 1 , t − d g_{now,t}=\sum\limits_{d=0}^t\binom tdg_{now+1,d}\times d_{0,t-d}+\sum\limits_{d=0}^t\binom tdf_{now+1,d}\times d_{A+1,t-d} gnow,t=d=0t(dt)gnow+1,d×d0,td+d=0t(dt)fnow+1,d×dA+1,td

f n o w , t = ∑ d = 0 t ( t d ) f n o w + 1 , t c A , t − d f_{now,t}=\sum\limits_{d=0}^t\binom td f_{now+1,t}c_{A,t-d} fnow,t=d=0t(dt)fnow+1,tcA,td

d p n o w , t dp_{now,t} dpnow,t的值为两者相加,即 d p n o w , t = f n o w , t + g n o w , t dp_{now,t}=f_{now,t}+g_{now,t} dpnow,t=fnow,t+gnow,t。再按上面的式子推出 ∑ i = j ( x + 1 ) 1 0 w + 3 − 1 f ( i ) g ( i ) \sum\limits_{i=j(x+1)}^{10^{w+3}-1}f(i)g(i) i=j(x+1)10w+31f(i)g(i),即可得到答案。

时间复杂度为 O ( k 3 lg ⁡ x ) O(k^3\lg x) O(k3lgx)

code

#include<bits/stdc++.h>
using namespace std;
const int N=100000;
const long long mod=1e9+7;
int len;
long long ans=0,k,num,a[N+5],b[N+5],w[15][25],sw[15][25];
long long jc[N+5],ny[N+5],tn[N+5],F[25],G[25],C[25][25],h[25][25],f[N+5][25],g[N+5][25];
char ch[N+5];
long long mi(long long t,long long v){if(!v) return 1;long long re=mi(t,v/2);re=re*re%mod;if(v&1) re=re*t%mod;return re;
}
void init(){jc[0]=1;for(int i=1;i<=N;i++) jc[i]=jc[i-1]*i%mod;ny[N]=mi(jc[N],mod-2);for(int i=N-1;i>=0;i--) ny[i]=ny[i+1]*(i+1)%mod;
}
long long gt(){memset(f,0,sizeof(f));memset(g,0,sizeof(g));f[len+1][0]=1;num=0;for(int now=len,A;now>=0;now--){A=b[now];for(int i=9;i>=0;i--){long long tmp=i*tn[now]%mod;w[i][0]=sw[i][0]=max(i,1);sw[i][0]=(sw[i][0]+sw[i+1][0])%mod;for(int j=1;j<=k-1;j++){w[i][j]=sw[i][j]=w[i][j-1]*tmp%mod;sw[i][j]=(sw[i][j]+sw[i+1][j])%mod;}}for(int i=0;i<k;i++){for(int j=0;j<=i;j++){F[j]=f[now+1][j]*C[i][j]%mod;G[j]=g[now+1][j]*C[i][j]%mod;}for(int j=0;j<=i;j++){g[now][i]=(g[now][i]+G[j]*sw[0][i-j]+F[j]*sw[A+1][i-j])%mod;f[now][i]=(f[now][i]+F[j]*w[A][i-j])%mod;}}num=(num+A*tn[now])%mod;}h[0][0]=1;for(int i=1;i<k;i++){for(int j=0;j<k;j++){h[i][j]=(h[i-1][j]*(i-num)+h[i-1][j-1])%mod;}}long long re=0;for(int i=0;i<k;i++){re=(re+h[k-1][i]*(f[0][i]+g[0][i]))%mod;}return re;
}
int main()
{init();scanf("%lld",&k);scanf("%s",ch);len=strlen(ch);for(int i=0;i<len;i++) a[i]=ch[len-i-1]-'0';++a[0];len+=2;for(int i=0;i<=len;i++){if(a[i]>=10){a[i+1]+=a[i]/10;a[i]%=10;}}tn[0]=1;for(int i=1;i<=len;i++) tn[i]=tn[i-1]*10%mod;for(int i=0;i<=k;i++){C[i][0]=C[i][i]=1;for(int j=1;j<i;j++) C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;}long long tmp=1;for(int i=0;i<=k;i++,tmp*=-1){ans=(ans+tmp*C[k][i]*gt())%mod;for(int j=0;j<=len;j++){b[j]+=a[j];if(b[j]>=10){b[j+1]+=b[j]/10;b[j]%=10;}}}for(int i=1;i<k;i++) ans=ans*mi(i,mod-2)%mod;ans=(ans+mod)%mod;printf("%lld",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/104503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postman 密码rsa加密登录-1获取公钥

fiddler抓包看到&#xff1a;请求系统地址会自动跳转到sso接口&#xff0c;查看200状态的接口返回的html里存在一个encrypt的信息&#xff0c;咨询开发这个就是返回的公钥。 在postman的tests里对该返回进行处理&#xff0c;获取公钥并设为环境变量 //获取公钥 var pubKey re…

js深拷贝与浅拷贝

1.浅拷贝概念 浅拷贝是其属性与拷贝源对象的属性共享相同引用&#xff0c;当你更改源或副本时&#xff0c;也可能&#xff08;可能说的是只针对引用数据类型&#xff09;导致其他对象也发生更改。 特性&#xff1a; 会新创建一个对象&#xff0c;即objobj2返回fasle&#xf…

渗透测试漏洞挖掘技巧

文章目录 一、使用.json进行敏感数据泄漏二、如何查找身份验证绕过漏洞三、在Drupal上找到隐藏的页面四、遗忘的数据库备份五、电子邮件地址payloads六、HTTP主机头&#xff1a;localhost七、通过篡改URI访问管理面板八、通过URL编码空格访问管理面板九、篡改URI绕过403十、Byp…

【Spring源码分析】Bean的元数据和一些Spring的工具

Bean的元数据和一些Spring工具 一、BeanDefinition1、认识 BeanDifinition2、AbstractBeanDefinition3、GenericBeanDefinition测试 二、BeanDefinition 注册器三、加载BeanDefinition四、包扫描过程分析包扫描过程总结 五、内省 API六、反射工具Bean 的创建批量构造Resolvable…

【Java】split 分割方法

String 分割split() 用法 特殊情况&#xff1a;* ^&#xff1a;| . \ split() 用法 返回数组类型 String str "北京市|上海市|银川市|武汉市" String[] array str.split("|"); 注意事项&#xff1a; split表达式&#xff0c;其实就是一个正则表达式。* …

c++视觉处理---仿射变换和二维旋转变换矩阵的函数

仿射变换cv::warpAffine cv::warpAffine 是OpenCV中用于执行仿射变换的函数。仿射变换是一种线性变换&#xff0c;可用于执行平移、旋转、缩放和剪切等操作。下面是 cv::warpAffine 函数的基本用法&#xff1a; cv::warpAffine(src, dst, M, dsize, flags, borderMode, borde…

【学习笔记】Spring Security 01 认识Spring Security的重要特征(Features)

Spring Security 零、概述 Spring Security&#xff08;简称SS&#xff09;是一个高可用的、可自定义的身份认证和鉴权控制的框架。 类似的框架还有Shiro。 需求场景&#xff1a; 现今流行的web开发中&#xff0c;安全的第一位。 原本的鉴权开发流程&#xff1a;springweb自…

【ROS】使用vscode浏览navigation2源码时,提示:没有那个文件或目录

1、问题描述 使用vscode浏览navigation2源码时,头文件下面有波浪线,并提示:没有那个文件或目录。比如没有:geometry_msgs/msg/polygon.h 错误信息: 无法打开源文件 “geometry_msgs/msg/polygon.h” (dependency of “nav2_controller/controller_server.hpp”)C/C++(16…

【C++】异常处理之throw、catch、try、局部资源管理、标准异常库

一、抛出异常 异常处理机制两个主要成分&#xff1a; 异常的鉴定与发出&#xff1b;异常的处理方式。 C通过throw表达式产生异常&#xff1a; inline void Triangular_iterator:: check_integrity() {if(_index>Triangular::max_elems){throw iterator_overflow(_index,…

解决react使用css module无法重写bootstrap样式的问题

react使用css module虽然能够解决样式污染&#xff0c;但是同时也失去了写css样式的灵活性&#xff0c;特别是&#xff1a;在.module.css文件中当子元素是非变量的静态class类&#xff08;比如bootstrap&#xff09;, 此时使用css选择器对该子元素的样式不会起作用的 比如下面…

什么是API网关?——驱动数字化转型的“隐形冠军”

什么是API网关 API网关&#xff08;API Gateway&#xff09;是一个服务器&#xff0c;位于应用程序和后端服务之间&#xff0c;提供了一种集中式的方式来管理API的访问。它是系统的入口点&#xff0c;负责接收并处理来自客户端的请求&#xff0c;然后将请求路由到相应的后端服…

为什么Excel插入图片不显示,点击能够显示

今天在做Excel表格时&#xff0c;发现上传图片后不能显示&#xff0c;但是点击还是能够出现图片的 点击如下 点击能看到&#xff0c;但是不显示&#xff1f;那么只需鼠标右键点击浮动即可显示

sql 注入(3), 报错型注入

报错型注入 无法使用 union 注入时, 尝试报错注入往往很有效. 一, 不适用 union 注入的情况: 在页面上无法显示查询结果.从页面变化或报错信息中无法探测出有效的列数. 二, mysql处理xml文件 情景: 表名为 [xmltable], 表中列名为 [testxml], 值是字符串类型, 保存了一段…

CSS 滚动驱动动画 animation-range

animation-range 语法 normallength-percentagetimeline-range-name 具名时间线范围 named timeline rangecovercontainentry 和 entry-crossingexit 和 exit-crossing 兼容性 animation-range 这个属性可同时对 scroll progress timeline 和 view progress timeline 这两种不…

头歌的数据库的第二次作业的答案

目录 MySQL-视图 第1关&#xff1a;创建所有保险资产的详细记录视图 第2关&#xff1a;基于视图的查询 MySQL数据库 - 连接查询 第1关&#xff1a;内连接查询 第2关&#xff1a;外连接查询 第3关&#xff1a;复合条件连接查询 MySQL数据库 - 子查询 第1关&#xff1a;…

了解华为交换机路由器的基本命令

什么是CLI&#xff1a;使用户与设备交互的界面&#xff0c;用户输入对应的命令&#xff0c;设备会回复我们输入的内容&#xff0c;回车车后设备会执行对应命令&#xff0c;达到管理、配置、查看的目的。 CLI界面分为三种操作视图&#xff1a; 用户试图&#xff1a;设备登陆后…

【java|golang】多字段排序以及排序规则

奖励最顶尖的 K 名学生 给你两个字符串数组 positive_feedback 和 negative_feedback &#xff0c;分别包含表示正面的和负面的词汇。不会 有单词同时是正面的和负面的。 一开始&#xff0c;每位学生分数为 0 。每个正面的单词会给学生的分数 加 3 分&#xff0c;每个负面的词…

selenium打开火狐浏览器

项目上需求为&#xff1a;甲方OA 系统是IE系统&#xff0c;需要从IE系统点个按钮打开火狐浏览器单点登录跳转到我们的系统 前期解决方案为&#xff1a;打开浏览器就行了&#xff0c;然后就用的是打开本地浏览器&#xff0c;但是由于B/S架构&#xff0c;有别人远程访问我的ip来…

如何使用ChatPPT生成PPT文档

简介 ChatPPT是一个基于人工智能的PPT生成工具&#xff0c;可以帮助用户快速生成高质量的PPT文档。ChatPPT使用自然语言处理技术&#xff0c;可以根据用户的指令生成PPT内容、设计和排版。 使用方法 ChatPPT提供了两种使用方式&#xff1a;在线体验版和Office插件版。 在线…

【博客搭建】1、拾壹博客本地启动遇到的问题和需要注意的坑

一、后端&#xff08;blog&#xff09;启动 1、修改application.yml中的数据库链接与密码&#xff0c;Redis账号密码&#xff0c;即可启动成功&#xff1b; 2、运行之前先导入sql&#xff1b; 3、 如需上传文件保存至本地&#xff08;例如相册的照片&#xff09;&#xff0c;需…