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;
}
posted @ 2025-06-28 20:56  swate  阅读(9)  评论(0)    收藏  举报
body{ cursor: url(https://files.cnblogs.com/files/wkfvawl/cursor.ico),auto; }