题解:P14935 「FAOI-R10」清风少年
sol
本解法的核心是构造对选手最有利的极端场景以判断其是否存在晋级可能,具体为:先计算单个武馆的最大晋级名额 \(k = \lfloor \frac{m}{3} \rfloor\)(三分之一限制,向下取整),再遍历 \(q\) 个实力强劲的武馆,最大化强馆前排选手的「排名占用+规则刷空」效应以更新选手能晋级的最大排名阈值 \(R\),后续补充非强馆未占满的剩余名额确定最终 \(R\),最终通过判断选手排名 \(r\) 是否满足 \(r \le R\) 来输出结果,若满足则存在晋级可能输出 Yes,否则一定无法晋级输出 No。
:::info[code]{open}
#include<bits/stdc++.h>
using namespace std;
int T;
int main() {
cin>>T;
while(T--) {
int r,q,n,m;
cin>>r>>q>>n>>m;
int k=m/3; //三分之一限制
int a=0;
int R=0;
for(int i=0;i<q&&a<m;i++) {//当前强馆实际能占用的晋级名额:不超过单馆上限k,也不超过总名额剩余量
int b=min(k,m-a);
int c=i*n+b;
if(c>R)
R=c;
a+=b;
}
if(a<m)
R=q*n+(m-a); //q*n是所有强馆参赛人数,m-a是剩余待填补的名额
if(r<=R) {
cout<<"Yes\n";
} else {
cout<<"No\n";
}
}
return 0;
}

浙公网安备 33010602011771号