社区讨论

60pts求调

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mik5ic5p
此快照首次捕获于
2025/11/29 18:31
3 个月前
此快照最后确认于
2025/11/30 19:00
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,m,ans;
bool v[N];
struct rec
{
    int x,y,z,id;
}a[N],b[N];
bool cmp1(rec qiu,rec qiuu)
{
    return qiu.x<qiuu.x;
}
bool cmp2(rec qiu,rec qiuu)
{
    return qiu.z<qiuu.z;
}
signed main()
{
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld%lld",&a[i].x,&a[i].y);
        a[i].z=a[i].x+a[i].y,a[i].id=i;
        b[i].x=a[i].x,b[i].y=a[i].y,b[i].z=a[i].z,b[i].id=i;
    }
    sort(a+1,a+n+1,cmp1);
    sort(b+1,b+n+1,cmp2);
    int old=0,neww,sum=0,cnt=0,plus=b[1].z;
    for(int i=1;i<=n;i++)
    {
        neww=m-sum-a[i].x;
        if((neww/m)!=(old/m))
        {
            if(cnt<2||m<sum)
            {
                // for(int j=i-1;j>=i-cnt-1;j++) v[j]=false;
                break;
            }
            m-=sum,ans+=cnt;
            sum=0,cnt=0;
        }
        sum+=a[i].x,cnt++,old=neww;
    }
    ans=ans+(m/plus)*2;
    m=m-(m/plus)*plus;
    // for(int i=1;i<=n;i++)
    // {
    //     if(!v[i]&&m>=a[i].x) ans++,m-=a[i].x;
    printf("%lld",ans);
    return 0;
}

回复

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

正在加载回复...