トピック1:
石が山積みになっています。ABでは2人が交代で、Aが最初になります。少なくとも1石、最大mを獲得するたびに、最後の石を獲得した人が勝ちます。ABが非常に賢いと仮定すると、石を選ぶ過程で間違いはありません。nとmが与えられた場合、最終的に誰がゲームに勝つかを尋ねます。たとえば、n = 3、m = 2です。Aがどうやってそれを手に入れても、Bは最後の石を手に入れることができます。
入力
行1:後で入力テストに使用される数値の数を表す数値T(1 <= T <= 10000)。2行目からT + 1行目:各行に2つの数字NとKがあり、スペースで区切られています(1 <= N、K <= 10 ^ 9)。
出力には
T行があります。Aが勝った場合はAを出力し、Bが勝った場合はBを出力します。
サンプル入力
4
3 2
4 2
7 3
8 3
サンプル出力
B
A
A
B
思考の流れの分析:
1 <= n <= mの場合、最初のAが勝ちます
。n== m + 1の場合、最初のAがいくつ取られても、Bは最終的に確実に終了します。
したがって: m +1はキー番号です
nは次の式を満たします:
n = k *(m + 1)+ r、(kは自然数、rは剰余、0 <= r <= m)
方法:
最初のプレイヤーは最初にrを奪い、常に(m + 1)の倍数の石を相手に残して、確実に勝つことができるようにします。
コード:
#include "stdio.h"
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d %d",&n,&m);
if(n%(m+1)!=0)
printf("A\n");
else
printf("B\n");
}
return 0;
}