【比赛记录】2025CSP-S模拟赛57

news/2025/10/3 19:26:39/文章来源:https://www.cnblogs.com/zhangxyhp/p/19124892
A B C D Sum Rank
100 60 15 - 175 8/22

A. 开挂

首先我们希望总步数最小,排序后一次使每个数成为大于它的最小的数即可。

然后根据排序不等式,我们希望修改操作尽可能的集中,倒着扫即可。此时需要确定比这个数大的最小的数,我使用了线段树。动态开点会被卡空间,提前离散化一下即可。

Code
#include<bits/stdc++.h>
#define ll long long
#define il inline
#define ull unsigned ll
#define lid id<<1
#define rid id<<1|1
#define lwrb lower_bound
using namespace std;
namespace asbt{
namespace cplx{bool begin;}
const int maxn=1e6+5,inf=2e9;
int n,a[maxn],b[maxn],c[maxn],d[maxn],cnt,tr[maxn<<2];
il void build(int id,int l,int r){tr[id]=l;if(l==r){return ;}int mid=(l+r)>>1;build(lid,l,mid);build(rid,mid+1,r);
}
il void upd(int id,int l,int r,int p){if(l==r){tr[id]=inf;return ;}int mid=(l+r)>>1;if(p<=mid){upd(lid,l,mid,p);}else{upd(rid,mid+1,r,p);}tr[id]=min(tr[lid],tr[rid]);
}
il int query(int id,int L,int R,int l,int r){if(L>=l&&R<=r){return tr[id];}int mid=(L+R)>>1,res=inf;if(l<=mid){res=min(res,query(lid,L,mid,l,r));}if(r>mid){res=min(res,query(rid,mid+1,R,l,r));}return res;
}
namespace cplx{bool end;il double usdmem(){return (&begin-&end)/1048576.0;}
}
int main(){
//	cout<<cplx::usdmem();
//	freopen("sample_openhook6.in","r",stdin);ios::sync_with_stdio(0),cin.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){cin>>b[i];}sort(a+1,a+n+1);sort(b+1,b+n+1);for(int i=1;i<=n;i++){d[i]=a[i];if(d[i-1]>=d[i]){d[i]=d[i-1]+1;}}build(1,1,n);for(int i=n;i;i--){int t=query(1,1,n,lwrb(d+1,d+n+1,a[i])-d,n);
//		cout<<t<<'\n';c[++cnt]=d[t]-a[i];upd(1,1,n,t);}sort(c+1,c+cnt+1);ull ans=0;for(int i=cnt,j=1;i;i--,j++){ans+=c[i]*1llu*b[j];}cout<<ans;return 0;
}
}
int main(){return asbt::main();}

B. 叁仟柒佰万

首先可以暴力 DP,枚举 \(\operatorname{mex}\),设 \(f_i\) 表示以 \(i\) 为结尾的方案数。然后可以发现有贡献的 \(\operatorname{mex}\) 只有全局 \(\operatorname{mex}\)。证明如下:

设全局 \(\operatorname{mex}\)\(k\)。若最终的 \(\operatorname{mex}=x\),分类讨论:

  • \(x<k\),由于全局 \(\operatorname{mex}\)\(k\),则必然有一个区间中有 \(x\),即该区间的 \(\operatorname{mex}\ne x\),矛盾。
  • \(x>k\),由于全局 \(\operatorname{mex}\) 不为 \(k\),则序列中没有 \(k\),此情况不可能。

故最终的 \(\operatorname{mex}\) 只能为 \(k\)

于是就不用枚举 \(\operatorname{mex}\) 了。转移式长这样:

\[f_i=\sum_{j=0}^{p}f_j \]

其中满足 \(\operatorname{mex}[p+1,i]=k\)\(\operatorname{mex}[p,i]\ne k\)。显然 \(p\) 关于 \(i\) 是不降的,双指针即可。

Code
#include<bits/stdc++.h>
#define ll long long
#define il inline
using namespace std;
namespace asbt{
const int maxn=4e7+5,mod=1e9+7;
il int pls(int x,int y){return x+y<mod?x+y:x+y-mod;
}
il void add(int &x,int y){x=pls(x,y);
}
il int mns(int x,int y){return x<y?x-y+mod:x-y;
}
il void sub(int &x,int y){x=mns(x,y);
}
int T,n,a[maxn],f[maxn],vis[maxn];
il void input(){int x,y;cin>>x>>y;for(int i=2;i<=n;i++){a[i]=(a[i-1]*1ll*x+y+i)&262143;}
}
il int mex(){int t=0;for(int i=1;i<=n;i++){vis[a[i]]=1;while(vis[t]){t++;}}for(int i=0;i<=n;i++){vis[i]=0;}return t;
}
int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>T;while(T--){cin>>n;if(n<=3e5){for(int i=1;i<=n;i++){cin>>a[i];}}else{input();}int k=mex();
//		cout<<k<<'\n';f[0]=1;int p=1,cnt=0;for(int i=1;i<=n;i++){vis[a[i]]++;if(cnt<k&&a[i]<k&&vis[a[i]]==1){cnt++;}int t=0;if(cnt==k){while(p<i&&(a[p]>=k||vis[a[p]]>1)){vis[a[p++]]--;}t=f[p-1];
//				cout<<i<<' '<<p<<'\n';}f[i]=pls(f[i-1],t);}cout<<mns(f[n],f[n-1])<<'\n';for(int i=0;i<=n;i++){f[i]=vis[i]=0;}}return 0;
}
}
int main(){return asbt::main();}

C. 超级加倍

考虑建出 kruskal 重构树 T1 和 T2,于是题目要求变为 \(x\) 在 T1 上是 \(y\) 的祖先并且 \(y\) 在T2 上是 \(x\) 的祖先。在 T1 上跑出 dfn 后在 T2 上二维偏序即可。

Code
#include<bits/stdc++.h>
#define ll long long
#define il inline
#define pb push_back
using namespace std;
namespace asbt{
const int maxn=2e6+5;
int n,fa[maxn],dfn[maxn],cnt,sz[maxn];
ll ans;
struct edge{int u,v,w;il bool operator<(const edge &x)const{return w<x.w;}
}e[maxn];
struct{#define lowbit(x) (x&-x)int tr[maxn];il void add(int p,int v){for(;p<=n;p+=lowbit(p)){tr[p]+=v;}}il int query(int p){int res=0;for(;p;p-=lowbit(p)){res+=tr[p];}return res;}#undef lowbit
}F;
struct{vector<int> e[maxn];il void dfs1(int u){sz[u]=1,dfn[u]=++cnt;for(int v:e[u]){dfs1(v);sz[u]+=sz[v];}}il void dfs2(int u){ans+=F.query(dfn[u]+sz[u]-1)-F.query(dfn[u]-1);F.add(dfn[u],1);for(int v:e[u]){dfs2(v);}F.add(dfn[u],-1);}
}T1,T2;
il int find(int x){return x!=fa[x]?fa[x]=find(fa[x]):x;
}
int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>n;for(int i=1,j;i<=n;i++){cin>>j;if(j){e[i-1]={min(i,j),max(i,j),max(i,j)};}fa[i]=i;}sort(e+1,e+n);for(int i=1;i<n;i++){int u=e[i].u,v=e[i].v;T1.e[v].pb(find(u));fa[find(u)]=find(v);e[i].w=-u;}T1.dfs1(find(1));sort(e+1,e+n);for(int i=1;i<=n;i++){fa[i]=i;}for(int i=1;i<n;i++){int u=e[i].u,v=e[i].v;T2.e[u].pb(find(v));fa[find(v)]=find(u);}T2.dfs2(find(1));cout<<ans;return 0;
}
}
int main(){return asbt::main();}

D. 虚树

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

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

相关文章

实用指南:软件设计师——04 操作系统

实用指南:软件设计师——04 操作系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

优化排名推广技术网站wordpress 模板 怎么用

在物质世界的繁华背后&#xff0c;隐藏着一个深刻的真理&#xff1a;有形之物的分享会逐渐减少&#xff0c;而无形之物的传递却能不断增值。金钱、货币、银两这些商业领域的实体&#xff0c;往往激发出人类对更多财富的渴望和对资源枯竭的恐惧。这种恐惧源于资源的有限性&#…

移动网站开发工具网站权限怎么设置方法

本篇主要讲Animation 和 Property Animation的使用&#xff0c;最后会讲QQ管家桌面火箭作为例子&#xff1a; 在Android中开发动效有两套框架可以使用&#xff0c;分别为 Animation 和 Property Animation&#xff1b; 相对来说&#xff0c;Animator比Animation要强大太多&…

实用指南:洛谷题解——C语言(9.17——9.19)

实用指南:洛谷题解——C语言(9.17——9.19)2025-10-03 19:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

怎样保证网站的安全性网站建设没业务

再谈编译链接 C函数重载与编译链接-CSDN博客 之前我已经写过文章简单介绍了编译链接要做的一些操作。现在为了能更好的理解我们平时的开发环境&#xff0c;我会在Linux系统上完整地走一遍流程。 环境描述 我们使用普通用户在Linux上进行操作&#xff0c;先写一段测试代码。 …

多模态大语言模型OISA - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

微信公众号的网站品牌推广策略有哪几种

几个星期前几个月前&#xff0c;我正在寻找如何为Oracle Cloud项目设计新的REST API。 我计划要做的事情之一就是使用Marc Hadley在Jersey 1.x中创建的声明性链接注入。 可悲的是这并没有被转发移植然而&#xff0c;这样一个快速的聊天项目带动和我承担了使代码最新的小中型工作…

电力网站怎么做随州网站建设便宜

Enum是一个特殊的类. 我们不能以class Xxx extends Enum的方式手动继承, 必须写成enum Xxx的形式; 然而这段枚举类的定义在编译之后又变回了class Xxx extends Enum. 一、类定义 public abstract class Enum<E extends Enum<E>>implements Comparable<E>, …

sk06.【scikit-learn基础】--『监督学习』之决策树 - 教程

sk06.【scikit-learn基础】--『监督学习』之决策树 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

20251001国庆模拟

Part 1 题目列表P7075 [CSP - S2020] 儒略日 P7076 [CSP - S2020] 动物园 P7077 [CSP - S2020] 函数调用 P7078 [CSP - S2020] 贪吃蛇Part 2 考试时间线 8:02 开题, 仅仅读了 10 分钟 T1 题目,就得出结论,大模拟。 …

线段树合并 [POI 2011] ROT-Tree Rotations

波兰人太神秘了,竟能出出来如此题目。 题意 给一棵树(读入不太寻常,这个容易处理,忽略不计), 每个叶子节点有一个权值,我们可以选择交换一些节点的左右子树(保证是二叉树,且要么是叶子要么左右子树都存在)。 …

CSS的选择器 - 指南

CSS的选择器 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…

ModuleNotFoundError: No module named wandb.keras

from wandb.keras import WandbCallback ModuleNotFoundError: No module named wandb.keras ================================ Successfully installed annotated-types-0.7.0 eval-type-backport-0.2.2 gitdb-4.0.1…

wordpress建站网注册公司流程和费用

0 前言 使用stm32官方可视化初始化代码生成工具STM32CubeMX生成的工程GCC编译选项默认不支持非对齐访问&#xff0c;在我们进行非对齐的访问时就会进入数据异常中断DAbt中。为了解决这一问题&#xff0c;我们需要在GCC编译选项中加上一处配置。 1 操作方法 右键STM32CubeIDE…

C# Net9的模块初始化器(Module Initializer)

Module Initializer 是为了让库/框架在程序集加载时,以 “CLR 保证的、只运行一次的、不依赖类型访问的” 方式执行初始化逻辑,从而避免静态构造函数的副作用和性能问题。Module Initializer 是为了让库/框架在程序集…

离线轻量大模型,Ollama部署到docker方法

来自豆包 将Ollama部署到Docker的步骤如下: 一、安装Docker环境启用系统功能(Windows系统):打开“控制面板” → “程序与功能” → “启用或关闭Windows功能”。 勾选 Hyper-V、虚拟机平台、Linux子系统(WSL)。…

flink执行图 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:华为Pura 80芯片细节曝光,预示着华为多款新品即将震撼登场!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

应用拓扑讲义整理 Chapter 6. 单纯复形(Simplicial Complexes)

Chapter 6. 单纯复形 6.1 单纯复形的基本概念 6.1.1 仿射空间 Definition 6.1(仿射空间)仿射空间是一个三元组 \((E, \overrightarrow E, +)\),其中 \(E\) 是点集,\(\overrightarrow E\) 是由自由向量或转移组成的…

完整教程:华为麒麟9010、9020、9030、9040系列芯片的性能参数及其与高通芯片的对比

完整教程:华为麒麟9010、9020、9030、9040系列芯片的性能参数及其与高通芯片的对比pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fo…