T1
在原根的洗礼下,CCF 终于能出简单的题了,也是终于过五级了……
这是一道水贪心,或许连贪心都算不上,考场上打暴力就 A 了。
有两种券,就叫 \(q_1\) 和 \(q_2\) 吧,一共有 \(n\) 张 \(q_1\) 和 \(m\) 张 \(q_2\)。如果要免写一次作业,可以按如下两种情况操作:
- 用 \(a\) 张 \(q_1\) 和 \(b\) 张 \(q_2\)。
- 用 \(b\) 张 \(q_1\) 和 \(a\) 张 \(q_2\)。
需要让免作业数尽可能多。
注意到数据范围不大,可以考虑直接模拟。
要免得次数最多肯定要尽可能多的利用券,又因为两种操作方法只是顺序不同,所以 \(a\) 和 \(b\) 的顺序不重要,可以考虑把它们按降序排列,大的为 \(a\),小的为 \(b\),方便后文操作。
要尽可能多的利用券,所以可以分类讨论:
\[\begin{cases}
n > m \\
n \le m\\
\end{cases}
\]
第一种情况,肯定多用券多的,也就是所用 \(q_1\) 的券,又因为已经把它们按降序排列,所以免一次作业要花 \(a\) 张 \(q_1\) 和 \(b\) 张 \(q_2\);反之,相反。
Code
#include <bits/stdc++.h>
#define int long long
#define qwq(i,a,b) for(int i=(a);i<=(b);++i)
#define qaq(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
typedef long long ll;
signed main()
{
ll n, m, a, b;
ll cnt = 0;
cin >> n >> m >> a >> b;
if (a < b) swap(a, b); // 降序
while (1) {
if (n > m) { // 第一种情况
if (n - a >= 0 && m - b >= 0) {
n -= a;
m -= b;
cnt++;
} else {
break;
}
} else { // 第二种情况
if (n - b >= 0 && m - a >= 0) {
n -= b;
m -= a;
cnt++;
} else {
break;
}
}
}
cout << cnt;
}

浙公网安备 33010602011771号