A. Shovels and Swords(数学,均分)

现 在 假 设 n < = m 现在假设n<=m n<=m

当 2 n < = m , 就 算 一 直 使 用 两 倍 的 m 仍 然 有 多 , 此 时 答 案 是 n 当2n<=m,就算一直使用两倍的m仍然有多,此时答案是n 2n<=m,使m,n

当 2 n > m 当2n>m 2n>m

方 法 一 : 数 学 构 造 \color{Red}方法一:数学构造 :

那 么 我 们 可 以 先 多 用 一 些 m , 也 就 是 每 次 消 耗 n 一 次 , 消 耗 m 两 次 那么我们可以先多用一些m,也就是每次消耗n一次,消耗m两次 m,n,m

消 耗 到 n 和 m 相 等 为 止 , 也 就 是 执 行 这 种 操 作 m − n 次 消耗到n和m相等为止,也就是执行这种操作m-n次 nm,mn

此 时 n 和 m 一 样 多 了 此时n和m一样多了 nm

那 么 可 以 n 消 耗 两 次 , m 消 耗 一 次 。 紧 接 着 n 消 耗 1 次 , m 消 耗 两 次 那么可以n消耗两次,m消耗一次。紧接着n消耗1次,m消耗两次 n,mn1,m

也 就 是 答 案 再 加 上 n / 3 ∗ 2 也就是答案再加上n/3*2 n/32

这 个 时 候 n 和 m 余 数 可 能 是 0 , 1 , 2 , 如 果 余 数 是 2 说 明 答 案 还 可 以 加 1 这个时候n和m余数可能是0,1,2,如果余数是2说明答案还可以加1 nm0,1,2,21

方 法 二 : 结 论 \color{Red}方法二:结论 :

可 以 这 么 说 , 这 种 情 况 下 答 案 一 定 是 ( n + m ) / 3 可以这么说,这种情况下答案一定是(n+m)/3 ,(n+m)/3

因 为 经 过 上 面 的 分 析 知 道 最 后 n 和 m 一 定 可 以 用 到 都 小 于 3 因为经过上面的分析知道最后n和m一定可以用到都小于3 nm3

所 以 只 要 存 在 n + m 还 大 于 等 于 3 , 不 管 n 多 还 是 m 多 所以只要存在n+m还大于等于3,不管n多还是m多 n+m3,nm

都 可 以 消 耗 多 的 2 次 少 的 1 次 把 n 和 m 都 变 成 小 于 3 的 情 况 , 对 答 案 都 有 贡 献 都可以消耗多的2次少的1次把n和m都变成小于3的情况,对答案都有贡献 21nm3,

#include 
using namespace std;
int t,n,m;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m;
		if(n>m)	swap(n,m);
		if(n*2<=m)	cout<

你可能感兴趣的:(div题解)