2024.7.28 模拟赛10

news/2024/11/17 7:53:37/文章来源:https://www.cnblogs.com/ppllxx-9G/p/18350363

模拟赛

\(long\ long\ ago\)。。。

T1 Company Acquisitions

鞅的停时定理

赛时应该不可做的吧。

手膜两组样例发现肯定不能用常规方法做。然后开始新科技。

势能函数!!!

设计一个势能函数去表示一种状态,这个势能函数要满足每操作一步势能减一,这样初势能减末势能就是期望步数。

(是不是直接把势能差看成期望步数就行?)

对于本道题来说,设 \(f(x)\) 表示有 \(x\) 个儿子的点的势能,所以某一状态的势能就是 \(\sum f(x)\),末势能为 \(f(n-1)\)

我们想要找出势能函数之间的递推关系,对于任意两个点,显然有以下式子:

\[f(x)+f(y)-1=\frac{f(x+1)+yf(0)+f(y+1)+xf(0)}{2} \]

\(f(0)\),我们根本不在乎它的取值,因为最终求得是势能差,所以不妨设 \(f(0)=0\)

由于 \(f(x)\)\(f(x+1)\)\(f(y)\)\(f(y+1)\) 之间一定有相同的递推关系,所以:

\[f(x)-\frac{1}{2}=\frac{1}{2}f(x+1) \]

转化成等比数列的形式(注意是负数):

\[f(n)=1-2^n; \]

然后就很简单啦!(所以鞅的停时定理是啥?)(好像真的是板子题)

附赠小饼干 Slime and Biscuits + 快踩

code ```cpp #include using namespace std; #define LL long long const int N = 1e6+5,mod = 1e9+7; int n,a[N]; LL ans; inline LL qpow(LL a,LL b) {LL res=1;while(b){if(b&1) res=res*a%mod;a=a*a%mod; b>>=1;}return res; } int main() {// freopen("in.in","r",stdin);// freopen("out.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){int x; scanf("%d",&x);if(x!=-1) a[x]++;}for(int i=1;i<=n;i++)if(a[i]) ans=(ans-qpow(2,a[i])+1+mod)%mod;ans=(ans+qpow(2,n-1)-1+mod)%mod;printf("%lld\n",ans);return 0; } ```

T2 数学作业

又是矩阵加速板子。。。

突破点在递推关系,每加一个数 \(x\) 就是原数乘以 \(10^{len_x}\) 再加原数。

因此我们可以用 dp 的方法解决。而数据范围暗示了矩阵加速

因为位数是不定的,所以考虑按数字长度分段进行操作。复杂度带一个 \(log_{10}\)

注意 __int128

矩阵加速练习题

Sam数

专心OI - 跳房子

可乐

迷路

帕秋莉的手环

水题专场。

code
#include<bits/stdc++.h>
using namespace std;
#define LL __int128
long long n,m;
struct M
{LL x,y,mat[4][4]={};M operator * (const M &a) const{M c; c.x=x; c.y=a.y;for(int i=1;i<=x;i++)for(int j=1;j<=a.y;j++)for(int k=1;k<=y;k++)c.mat[i][j]=(c.mat[i][j]+mat[i][k]*a.mat[k][j]%m)%m;return c;}
};
M qpow(M a,M b,LL c)
{while(c){if(c&1) a=(a*b);b=(b*b); c>>=1;}return a;
}
int main()
{// freopen("in.in","r",stdin);// freopen("out.out","w",stdout);scanf("%lld%lld",&n,&m);M a,b;a.x=1; a.y=b.x=b.y=3;a.mat[1][2]=a.mat[1][3]=1;b.mat[2][1]=b.mat[2][2]=b.mat[3][2]=b.mat[3][3]=1;for(LL i=1,j=1;;i++){j=b.mat[1][1]=j*10;//注意 j 不要 modb.mat[1][1]%=m;if(n<j){a=qpow(a,b,n-j/10+1);break;}a=qpow(a,b,j-j/10);}printf("%lld\n",(long long)a.mat[1][1]);return 0;
}

T3 「P6156 简单题」加强版

开始莫反。。。 求: $$ \sum_{i=1}^{n}\sum_{j=1}^{n} (i+j)^K \gcd(i,j) \mu^2(\gcd(i,j)) \pmod {2^{32}} $$ 套路: $$ \begin{aligned} ans&=\sum_{i=1}^{n}\sum_{j=1}^{n} (i+j)^K \gcd(i,j) \mu^2(\gcd(i,j)) \\ &=\sum_{d=1}^{n}\mu^2(d)d\sum_{i=1}^{n}\sum_{j=1}^{n}(i+j)^k[gcd(i,j)=d]\\ &=\sum_{d=1}^{n}\mu^2(d)d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}(id+jd)^k[gcd(i,j)=1]\\ &=\sum_{d=1}^{n}\mu^2(d)d^{k+1}\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}(i+j)^k[gcd(i,j)=1]\\ &=\sum_{d=1}^{n}\mu^2(d)d^{k+1}\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}(i+j)^k\sum_{e\mid gcd(i,j)}^{n}\mu(e)\\ &=\sum_{d=1}^{n}\mu^2(d)d^{k+1}\sum_{e=1}^{\lfloor \frac{n}{d} \rfloor}\mu(e)e^k \sum_{i=1}^{\lfloor \frac{n}{de} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{de} \rfloor}(i+j)^k\\ &=\sum_{d=1}^{n}\sum_{e=1}^{\lfloor \frac{n}{d} \rfloor}d^{k+1}e^k\mu^2(d)\mu(e)\sum_{i=1}^{\lfloor \frac{n}{de} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{de} \rfloor}(i+j)^k \end{aligned} $$ $$ S(n)=\sum_{i=1}^{n}\sum_{j=1}^{n}(i+j)^k $$ $$ T=de $$ $$ \begin{aligned} ans&=\sum_{d=1}^{n}\sum_{e=1}^{\lfloor \frac{n}{d} \rfloor}d^{k+1}e^k\mu^2(d)\mu(e)S(\lfloor \frac{n}{de} \rfloor)\\ &=\sum_{T=1}^{n}T^k S(\lfloor \frac{n}{T} \rfloor)\sum_{d \mid T}\mu^2(d)\mu(\frac{n}{d})d \end{aligned} $$ 先考虑筛 $S(n)$,

\(F(x)=\sum_{i=1}^{x}i^k\)\(G(x)=\sum_{i=1}^{x}F(i)\)

\(S(n)=G(2n)-2G(n)\)。(数学归纳法可证,直接感性理解更好?)

两次前缀和就可以了。

然后考虑筛 \(\sum_{d \mid T}\mu^2(d)\mu(\frac{n}{d})d\)

再考虑 \(f(n) = \sum_{d|n}d \mu^2(d)\mu(\frac{n}{d})\):由于是一堆积性函数的狄利克雷卷积的形式,则 \(f(n)\) 也一定是积性函数。

考虑欧拉筛筛中 \(x\) 时,枚举到的质因数是 \(p\)。从 \(\mu\) 函数着手考虑,则讨论 \(p\)\(x\) 中的最高次幂因子:假设 \(p^k \mid x\) 且有 \(p^{k+1} \nmid x\)

根据积性函数性质,则有:\(f(x) = f(p^k) \times f(\frac{x}{p^k})\)

讨论一下 \(f(p^k)\) 的取值:

  • \(k=0\),即 \(f(1)\) 的取值一定为 \(1\)
  • \(k=1\),则 \(f(p) = 1 \mu^2(1) \mu(p) + p \mu^2(p) \mu(1) = p-1\)
  • \(k=2\),则 \(f(p^2) = 1 \mu^2(1) \mu(p^2) + p \mu^2(p) \mu(p) + p^2 \mu^2(p^2) \mu(1)=-p\)
  • \(k \ge 3\),由于鸽笼原理,此时 \(d\)\(\frac{x}{d}\) 中至少有一个能被 \(p^2\) 整除,则那一个的 \(\mu\) 的值为 \(0\)。所以此时 \(f(p^k)=0\)

(借鉴一下)

code
#include<bits/stdc++.h>
using namespace std;
const int N = 2e7+5;
#define LL unsigned int
LL p[N],f[N],F[N],n,k,t;
bool vs[N];
inline LL qpow(LL a,LL b)
{LL res=1;while(b){if(b&1) res=res*a;a=a*a; b>>=1;}return res;
}inline void init()
{f[1]=F[1]=1;for(int i=2;i<=n<<1;i++){if(!vs[i]) f[i]=i-1,F[i]=qpow(i,k),p[++p[0]]=i;for(int j=1;j<=p[0]&&i*p[j]<=n<<1;j++){vs[p[j]*i]=1; F[i*p[j]]=F[i]*F[p[j]];if(i%p[j]==0){if((i/p[j])%p[j]) f[i*p[j]]=(-p[j])*f[i/p[j]];break;}f[p[j]*i]=f[i]*(p[j]-1);}}for(int i=2;i<=n<<1;i++) f[i]=(f[i-1]+f[i]*F[i]),F[i]=(F[i-1]+F[i]);for(int i=2;i<=n<<1;i++) F[i]=(F[i-1]+F[i]);
}
inline LL cal(LL x)
{return ((F[x<<1]-(F[x]<<1)));
}
int main()
{// freopen("in.in","r",stdin);// freopen("o1.out","w",stdout);scanf("%u%u%u",&t,&n,&k); init(); while(t--){scanf("%u",&n);LL ans=0;for(int l=1,r;l<=n;l=r+1){r=(n/(n/l));ans=(ans+((f[r]-f[l-1]))*cal(n/l));}printf("%u\n",ans);		}return 0;
}

T4

水题放 T4。。。

没啥,直接数位 dp 相当好写(其实没有 dp),其实直接贪也行吧。

code
#include<bits/stdc++.h>
using namespace std;
const int N = 30;
#define LL long long
LL n;
int len,ans,a[N];
int dfs(int p,int sum,bool c)
{if(!p) return sum;if(!c) return sum+9*p;int res=0;res=max(dfs(p-1,sum+a[p],1),a[p]-1>=0?dfs(p-1,sum+a[p]-1,0):0);return res;
}
int work(LL x)
{len=0; while(x) a[++len]=x%10,x/=10;return dfs(len,0,1);
}
int main()
{// freopen("in.in","r",stdin);// freopen("out.out","w",stdout);scanf("%lld",&n);printf("%d\n",work(n));return 0;
}

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

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

相关文章

关于虚树

关于譃漱关于虚树 瞎扯 某些树上问题,给了巨多节点,而实际上它们之中只有小部分能做出贡献,其余都是些水军,为杀尽 OIers的脑细胞 做出努力 考虑重新种一棵树,浓缩信息,简化节点个数,于是产生了 虚树。 大概是长这个样子: 红色结点是我们选择的关键点,即能够做出贡献的…

OpenGauss部署案例之---OpenEuler 20.03部署OpenGauss企业版

OpenGauss、OpenEuler案例说明: 在OpenEuler20.03系统,x86架构下部署OpenGauss 5.0.1企业版单实例数据库。 **数据库版本: ** openGauss=# select version();version -------------------------------------------------------------------------------------------------…

预训练语言模型公平性-公平性度量、去偏方法

一、内在偏见与外在偏见  1、内在偏见:训练前数据集中存在的刻板印象; 2、外在偏见:用来衡量偏差如何在下游任务中传播。通常包括微调,然后评估其关于性别和种族等敏感属性的表现; 3、许多NLP应用程序对现有的语言模型进行了微调,这些模型将外在偏见和内在偏见交织在一…

航天科技 “小快轻准”解决方案助力中小企业数字化转型

数字化转型喊了很多年,中小企业为何对降本增效无动于衷?“数字化转型,是中小企业的必答题。” 但是面临动辄十几万甚至几十万上百万的改造成本,投入真金白银,存在回报期长,不确定性大的问题,所以成本受限成为一大绊脚石。除了资金问题,缺人缺技术缺数据也是转型的难点…

IntelliJ IDEA 2024.2 发布:Spring Data JPA即时查询、自动补全cron表达式

今早看到,IntelliJ IDEA 2024.2 发布的邮件提示,看了一眼这个版本更新的新特性真的太适合我了!也许这些能力对关注DD的小伙伴也有帮助,所以搞篇博客介绍和推荐一下。下面就来一起看看这个版本中推出的几个强大新特性。 Spring Data JPA 的即时查询 在2024.2 Ultimate版本中…

CF379F New Year Tree

题意 给定图:每次在叶子结点加入两个点,并实时输出树的直径长度。 思路 每次增加两个点,直径至多变化一个点,长度最多加 1,所以对加入的点处理 lca,并且更新长度和点即可。 代码 #include <bits/stdc++.h>using namespace std;const int N = 1000010;int fa[30][N]…

【总结】注册码泄露原理以及例题

该题目采用了SIMD指令集,该指令格式在CTF和攻防对抗中经常出现,可以提高执行效率的同时也可以增加逆向的难度。对于此类指令和题目,我们分析的方法是:遇到查意思,查的多了就跟看正常代码一样,采用动态分析。引言 题目给了小明的机器码:1653643685031597 用户user_id:xi…

Docker Desktop 出现 Unable to calculate image disk size 错误提示的解决方法

Win11安装了Docker Destop,版本为4.25.2。Docker Desktop能随系统启动而启动,其内部管理的容器也可以正常启动,但是不和谐的地方也出现了: 在从通知区域双击Docker Desktop的图标后,它就会出现如下错误信息,虽不影响使用,但是相当碍眼:解决方案: 【1】进入设置,关闭“…

docker pull实现断点续传

本文介绍了使用Docker从DockerHub上下载容器镜像时很有可能出现的网络中断的问题。默认情况下,如果Docker下载镜像的过程中被中断了,是要从头开始下载的,而且再次下载也有可能受到网络波动的影响。这里提供了一种配置docker参数文件的方法,以及在该方案不生效的情况下的手动…

清除电脑c盘空间—Windows.edb

前言:一大早发现电脑好卡,然后看c盘居然红了,238G的总空间呢,按理现有软件不会占用这么多内存的。 1、火绒的垃圾清理走一波,没清掉多少 2、c盘右键=》属性=》常规下的 磁盘清理 ,也没清掉多少 3、c盘右键=》有个释放c盘空间,点开后发现是wps清理大师,不知道什么时候存…

简单理解H264编码

H264视频码流原理参考帖子:https://blog.csdn.net/go_str/article/details/80340564?spm=1001.2014.3001.5502 0、序言: 首先要弄明白编码的目的。当你此刻显示器正在播放一个视频,分辨率为1280*720,帧率为25,那么一秒所产生正常的数据大小为:1280*720(像素)*25(张)…

.NET 8 + Blazor 多租户、模块化、DDD框架、开箱即用

前言 基于 .NET 8 的开源项目,主要使用 WebAPI + Blazor 支持多租户和模块化设计,DDD构建。可以帮助我们轻松地搭建起一个功能完善的Web应用程序。除了帮助你快速构建应用程序之外,项目也可以当做学习资料。我们可以从中了解到多租户、CQRS、DDD架构、云部署、Docker容器化等…