专栏文章
ABC415D题解
AT_abc415_d题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miotgnem
- 此快照首次捕获于
- 2025/12/03 00:52 3 个月前
- 此快照最后确认于
- 2025/12/03 00:52 3 个月前
贪心。
不难想到,先在 最小的店换是最优的。这样每次换后可乐减少的量也是最小的,那么能换的次数也是最多的。
可以按照 的值从小到大排序,能换就换。然后考虑在一个店最多喝到多少。由于每次换都是 ,则每次可以换的次数就是 ,我们令 ,则式子为 。则在当前店换的次数为 ,换完后将 更新为 。
记得不要见祖宗。
代码
CPP#include<bits/stdc++.h>
using namespace std;
#define int ll
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, pii> pipii;
const int MAXN = 2e5+5;
ll n, m;
pipii shop[MAXN];
ll ans;
signed main()
{
scanf("%lld%lld", &n, &m);
for(int i = 1;i <= m;i++)
{
scanf("%lld%lld", &shop[i].second.first, &shop[i].second.second);
shop[i].first = shop[i].second.first - shop[i].second.second;
// shop[i].first 就是上文所说的 D
}
sort(shop + 1, shop + m + 1);
for(int i = 1;i <= m;i++)
{
if(n < shop[i].second.first) continue;
ans += (n - shop[i].second.first + shop[i].first) / shop[i].first;
n = n - ((n - shop[i].second.first + shop[i].first) / shop[i].first) * shop[i].first;
}
printf("%lld", ans);
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...