[ARC145B] AB Game

The game is played by Alice and Bob. Initially, there are n stones.

The players alternate turns, making a move described below, with Alice going first. The player who becomes unable to make a move loses.

  • In Alice's turn, she must remove a number of stones that is a positive multiple of A.
  • In Bob's turn, he must remove a number of stones that is a positive multiple of B.

In how many of Game 1, Game 2, ..., Game N does Alice win when both players play optimally?

Constraints

  • 1N,A,B1018
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

$N$ $A$ $B$

Output

Print the answer.


Sample Input 1

4 2 1

Sample Output 1

2

In Game 1, Alice cannot make a move and thus loses.

In Game 2, Alice removes 2 stones, and then Bob cannot make a move: Alice wins.

In Game 3, Alice removes 2 stones, Bob removes 1 stone, and then Alice cannot make a move and loses.

In Game 4, Alice removes 2×2=4 stones, and then Bob cannot make a move: Alice wins.

Therefore, Alice wins in two of the four games.


Sample Input 2

27182818284 59045 23356

Sample Output 2

10752495144
### 题解 设这一局有 x 个石子,先手取完石子后有 x 个石子。同时先手取得石子是 a 的倍数,后手取的石子为 b 的倍数 1. 若 $xaa\le bx'=x \bmod ax'=(x \bmod a)aa>bx'\ge b2x'综上所述,先手必胜的条件是 (xa)(xmoda<b)

所以问题转化为有多少个 x[A,n] 满足 xmodA<b

[A,n] 的数按照 modA 的余数分组,每 A 个为一组。那么共有 nAA 个完整的组。每一组里面有 min(a,b) 个合法的数。剩下的 nmodA+1 个数里面又有 min(nmodA+1,b) 个合法的数。我们就可以 O(1) 求出答案。

注意特判 n<A

#include<bits/stdc++.h>
#define ll long long
#define p1 998244353
#define p2 1000000007
using namespace std;
ll n,a,b,ans;
int main()
{
	scanf("%lld%lld%lld",&n,&a,&b);
	if(n<a) printf("0");
	else{
		n-=a;
		ans+=n/a*min(a,b);
		n-=n/a*a;
		printf("%lld\n",ans+min(n+1,b));
	}
	return 0;
}
posted @   灰鲭鲨  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示