题目链接:https://codeforces.com/contest/2276/problem/A
题目大意:
给定奶酪和香肠的总数,在必须全部用完且每个三明治的奶酪数严格大于香肠数的前提下,求最多能做多少个三明治(无解输出-1)。
题目思路:
可以知道如果b>=a,那么一定无解,因为不能保证所有三明治中奶酪数严格大于香肠数,否则就一定存在合法分配方案,令d=a-b表示多余的奶酪,假如此时有x个三明治,其中每个三明治的奶酪和香肠数一样,如果d>b,说明可以做最多b个三明治,如果d<b,那么就只能做d个三明治,因为此时不能保证每个三明治被分配到多余奶酪了
时间复杂度O(1)
代码如下:
cpp
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
// #define int long long
/*
https://codeforces.com/contest/2276/problem/A
Div.2 CF edu195A题(数学,贪心)
题目大意:给定奶酪和香肠的总数,在必须全部用完且每个三明治的奶酪数
严格大于香肠数的前提下,求最多能做多少个三明治(无解输出-1)。
题目思路:可以知道如果b>=a,那么一定无解,因为不能保证所有三明治中奶酪数严格大于香肠数,
否则就一定存在合法分配方案,令d=a-b表示多余的奶酪,假如此时有x个三明治,
其中每个三明治的奶酪和香肠数一样,如果d>b,说明可以做最多b个三明治,
如果d<b,那么就只能做d个三明治,因为此时不能保证每个三明治被分配到多余奶酪了
*/
// 时间复杂度O(1)
void solve()
{
int a, b;
cin >> a >> b;
if (b >= a)//奶酪数不大于香肠数
{
cout << -1 << endl;
return;
}
int d = a - b;//多余奶酪
cout << min(d, b) << endl;//取最小
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
cin >> T;
while (T--)
{
solve();
}
return 0;
}