2025.10.29 CSP-S模拟赛总结
今天模拟赛没打好,只拿了 \(124\) 分,连一等线都没到,哎
题目链接
题解链接
T1
这道题竟然花了我一个小时的时间!!!,一个裸的线段树板子,只是区间修改为一个点忘了,跟个躺尸一样想半天,还花了 \(10\) 分钟去模拟阳历,无语
T2
想半天贪心假了,只拿了 \(24\) 分,正解应为二分查找(二分太烂了)
补题链接
用二分查找在 \(mid\) 个小时内送完所有的订单,现将距离性骑士和重量型骑士从小到大排序,并把订单按照重量从小到大排序,先处理距离性选手,把每个选手可以送的订单放入一个大根堆里(如果前面的骑士可以送的订单那么后面的骑士一定也可以送),每次让当前骑士送大根堆里前 \(mid\) 个订单,即先处理对于当前骑士最难处理的订单(如果堆中元素不满 \(mid\) 取整个堆),然后把剩下的订单加入堆中,按照上面的方式让重量型骑士来送他能送的最大距离的不大于 \(mid\) 个订单,处理中如果某个骑士无法送当前的订单,那么他后面的骑士也无法送(因为是从大到小排序),那么直接结束,最后如果订单有剩余,即没送完,则当前 \(mid\) 个小时送不完全部订单,否则可以。
二分的左边界为每个骑士每一小时都在工作,右边界为只有一个骑士在工作,注意统计答案用一个 \(ans\) 来统计,\(l\) 和 \(r\) 的区间变化为 \(l=mid+1\) 和 \(r=mid-1\)。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+6;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0' || c>'9'){
if(c=='-')
f=-1;
c=getchar();
}
while(c>='0' && c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
struct Node{
int w,d;
bool operator < (const Node &A){
return w<A.w;
}
}s[N];
//将订单按照重量从小到大排序
int n,m,q,l,r,ans;
int a[N],b[N];
inline bool check(int mid){
priority_queue<int> p;
//维护一个大根堆,让每位骑士送他能送的mid个最大距离的订单
int k=1;//依次枚举订单
for(int i=1;i<=n;i++){
for(;k<=q && s[k].w<a[i];k++)
p.push(s[k].d); //如果可以送这个订单就加入对
for(int j=1;j<=mid && !p.empty();j++)
p.pop();//让这名骑手送<=mid的最大距离个订单
}
for(;k<=q;k++)
p.push(s[k].b);//把剩下的订单加入堆
for(int i=m;i;i--){
for(int j=1;j<=mid && !p.empty();j++){//把剩下的订单按照上面的方法分配
if(p.top()>=b[i]) //如果当前骑士无法送这个订单,则当前无法在mid个小时内送完订单
return false;
p.pop();
}
}
if(!p.empty())//如果订单有剩余,证明无法在mid的时间内完成
return false;
else
return true;
}
signed main(){
n=read(),m=read(),q=read();
for(int i=1;i<=n;i++)
a[i]=read();
for(int i=1;i<=m;i++)
b[i]=read();
sort(a+1,a+n+1);
sort(b+1,b+m+1);
for(int i=1;i<=q;i++)
s[i].w=read(),s[i].d=read();
sort(s+1,s+q+1);
int ans=-1,l=q/(n+m),r=q;//左边界为每个骑士每一小时都在工作,右边界为只有一个骑士在工作
while(l<=r){
int mid=(l+r)>>1;
if(check(mid))
ans=mid,r=mid-1;
else
l=mid+1;
}
printf("%lld",ans);
return 0;
}
T3
推了半个小时的阳历,又花了半个小时推特殊性质,结果爆 \(0\) 了,啊啊啊,正解为 DP,挺诡异的,学了好久 DP 还是不会用,哎
T4
不是 meet in the middle 是啥?折半搜索一点也不会,没时间打暴力直接用随机化还 TM 的写错了,还不瑞输出 \(1\)
总结:板子还是没记全记准,还需再练习一下,时间分配不合理,还是太菜了,根本不会做,哎

浙公网安备 33010602011771号