题解:P14635 [NOIP2025] 糖果店 / candy(民间数据)
0.前言
不能参加今年的 NOIP,大概是今年最大的遗憾吧。
1.思路
首先看到
我们考虑将糖果两颗两颗的拿,那么显然可以找到一个
但是,我们会发现问题:如果
然而,最后可能还剩
2.代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ioimprove(); ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define FILE(x); freopen(x".in","r",stdin);freopen(x".out","w",stdout);
int n,m,cnt,minn = 2147483647;
struct node
{
int val1,val2;
}a[214514];
bool cmp2(node x,node y)
{
return x.val1 < y.val1;
}
signed main()
{
ioimprove();
//FILE("candy");
cin>>n>>m;
for(int i = 1;i <= n;i++)
cin>>a[i].val1>>a[i].val2,minn = min(minn,a[i].val1 + a[i].val2);
sort(a + 1,a + n + 1,cmp2);
for(int i = 1;i <= n;i++)
{
if(i < n && m >= (a[i].val1 + a[i + 1].val1) && ((a[i].val1 + a[i + 1].val1) <= minn))
{
m -= (a[i].val1 + a[i + 1].val1);
cnt += 2;
i++;
continue;
}
else if(m % minn >= a[i].val1)
{
m -= a[i].val1;
cnt++;
}
}
cnt += (m / minn) * 2;
m %= minn;
cout<<cnt;
return 0;
}