专栏文章

P14635 [NOIP2025] 糖果店

P14635题解参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mimyueet
此快照首次捕获于
2025/12/01 17:47
3 个月前
此快照最后确认于
2025/12/01 17:47
3 个月前
查看原文
分拆成 x+yx+y 和单独的 xx 考虑。
对于 xx 从小到大排序,枚举,选最小的 ii 个。
对于 x+yx+y,使用剩余的钱重复选取最小的 x+yx+y
时间复杂度 O(nlogn)\mathcal{O}(n\log n),瓶颈在于排序。
记得判 m<sum(prefix(i))m<\text{sum}(\text{prefix}(i)),我场上没判。/ll
[NOIP2025] 糖果店 - candy.cppCPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int valx[maxn],valy[maxn];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n;cin>>n;
    long long m;cin>>m;
    int val=2e9;
    for(int i=1;i<=n;i++){
        cin>>valx[i]>>valy[i];
        val=min(val,valx[i]+valy[i]);
    }
    sort(valx+1,valx+1+n);
    long long ans=(m/val)*2,sum=0;
    for(int i=1;i<=n;i++){
        sum+=valx[i];
        if(m>=sum) ans=max(ans,((m-sum)/val)*2+i);
    }
    cout<<ans<<"\n";
    return 0;
}

评论

2 条评论,欢迎与作者交流。

正在加载评论...