P14635 [NOIP2025] 糖果店 / candy 题解
Zskioaert1106 · · 题解
题目传送门:P14635 [NOIP2025] 糖果店 / candy
题目分析
有一个关键的结论:只有一个
证明:假如有另一个
既然这样,除了这对
记
我们先假设
然后对于剩下的
我们用反悔贪心的思想,如果当前
最后把所有时候取
代码实现
复现的考场代码,应该差不多。
#include<iostream>
#include<algorithm>
using namespace std;
constexpr int N=100005;
int n,x[N],y[N],I=1,i,K;
long long m,sum,ans,cnt;
int main(){
cin>>n>>m;
for(i=1;i<=n;i++){
cin>>x[i]>>y[i];
if(x[i]+y[i]<x[I]+y[I])I=i;
}
K=x[I]+y[I];
ans=sum=cnt=m/K*2;
cnt/=2,m%=K;
sort(x+1,x+1+n);
for(i=1;i<=n;i++){
while(cnt>0&&m<x[i])m+=K,cnt--,sum-=2;
if(m<x[i])break;
m-=x[i],sum++;
ans=max(ans,sum);
}
cout<<ans;
return 0;
}