0
点赞
收藏
分享

微信扫一扫

CF1603B Moderate Modular Mode 题解

探头的新芽 2022-03-19 阅读 33
c++

提供一种分类讨论的做法。


思路

对于输入的 x x x y y y,会有一下三种情况:

  1. x > y x>y x>y

    易得,此时 n ← x + y n \gets x+y nx+y 是符合条件的:

    ( x + y ) m o d    x = y = y m o d    ( x + y ) (x + y) \mod x = y = y \mod (x +y) (x+y)modx=y=ymod(x+y)

  2. x = y x = y x=y

    易得,此时 n ← x n \gets x nx 是符合条件的(证明略)。

  3. x < y x<y x<y

    我们发现,当 x x x y y y 的差小于 x x x 时,有 n ← x + y − x 2 n \gets x+\dfrac{y-x}{2} nx+2yx 是符合条件的。

    所以我们只要每次让 x x x y y y 的值接近即可,也就是让 x x x 的值翻倍但却不大于 y y y

这样三种情况讨论完,这道题也就做出来了~


代码

#include<bits/stdc++.h>
using namespace std;

#define rint register int
int t, x, y;

int main () 
{
	scanf ("%d", &t);
	while (t--)
	{
		scanf ("%d %d", &x, &y);
		if (x > y) printf ("%d\n", x + y);
		if (x == y) printf ("%d\n", x); 
		if (x < y)
		{
			int s = x, tim = y / x;
			x = x * (tim + 1);
			if (x > y) x -= s;
			printf ("%d\n", (y - x) / 2 + x);
		}
	}
	return 0;
}
举报

相关推荐

0 条评论