社区讨论

假做法ccf喜提95pts

P14635[NOIP2025] 糖果店参与者 3已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mipq5ved
此快照首次捕获于
2025/12/03 16:08
3 个月前
此快照最后确认于
2025/12/05 14:50
3 个月前
查看原帖
rt,HAHAHAHAHAHAHAHA
CPP
#include<bits/stdc++.h>
#define us unsigned
#define ll long long
#define ci const int
#define cd const double
#define pb push_back
#define ppb pop_back
#define gc getchar
#define ppct __builtin_popcount
#define ctz __builtin_ctz
using namespace std;

struct C
{
    bool flg;
    ll data,id;
    C():data(0x3f3f3f3f),id(0),flg(0){}
    C(ll d,ll i,bool f):data(d),id(i),flg(f){}
    friend bool operator < (C a,C b){
        if(a.flg==b.flg)
            return a.data>b.data;
        else if(a.flg==1)
            return a.data>b.data*2;
        else
            return a.data*2>b.data;
    }
};

ll n,m,ans;
ll x[100100],y[100100];
priority_queue<C> P;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;++i)
        cin>>x[i]>>y[i];
    for(int i=1;i<=n;++i){
        P.push(C(x[i],i,0));
        P.push(C(x[i]+y[i],i,1));
    }
    while(m>=P.top().data){
        auto tmp=P.top();
        P.pop();
        // cout<<tmp.data<<'\n';
        if(tmp.flg==1){
            ans+=(m/tmp.data)*2;
            m%=tmp.data;
            continue;
        }
        ++ans;
        m-=tmp.data;
        if(tmp.data==x[tmp.id])
            P.push(C(y[tmp.id],tmp.id,0));
        else
            P.push(C(x[tmp.id],tmp.id,0));
    }
    cout<<ans<<endl;
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...