博弈论:倒腾思维D. Deleting Divisors——Codeforces Round #726 (Div. 2)

Posted 出尘呢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博弈论:倒腾思维D. Deleting Divisors——Codeforces Round #726 (Div. 2)相关的知识,希望对你有一定的参考价值。

https://codeforces.com/contest/1537/problem/D

博弈论:倒腾

  • 1.n为非合数就会输
  • 2.让n变为非合数的会赢
  • 3.(需要想法)奇数好像可以变成非合数。奇数的因子是奇数,得到偶数
  • 4.由于该奇数是m(奇)* n(奇)变为m * n-m=m(奇)(n-1)(偶)偶数,所以又可以减m变为奇数m(n-2),迟早会减为非合数的。

至此,奇数输,(奇)*(偶)赢

  • 5.只剩下不能分解成(奇)*(偶)的了,必是2的幂次。
  • 6.由于2输,2n要么减半要么减不到一半,如果不到一半,那又是非2n的(奇)*(偶)给对方赢。所以只能选减半还有希望。于是2^k是k为奇数则输,k为偶数则赢。

综上,输:奇数,2n且n为奇数。赢相反。

#include<iostream>
#ifdef LOCAL
FILE* FP = freopen("text.in", "r", stdin);
#endif
using namespace std; 
int t, n, c;
signed main()  
	scanf("%d", &t);
	while (t--) 
		scanf("%d", &n);
		c = 0;
		while (!(n & 1)) 
			n >>= 1;
			++c;
		
		printf("%s\\n", (!c || (n == 1 && (c & 1))) ? "Bob" : "Alice");
	

以上是关于博弈论:倒腾思维D. Deleting Divisors——Codeforces Round #726 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章

D. Deleting Divisors(博弈,思维)

Codeforces Round #726 (Div. 2) D. Deleting Divisors(博弈,思维)

2017中国大学生程序设计竞赛 - 女生专场 Deleting Edges(思维+最短路)

CF 666 (Div. 2) D. Stoned Game博弈论

CF 666 (Div. 2) D. Stoned Game博弈论

Codeforces Round #459 (Div. 2):D. MADMAX(记忆化搜索+博弈论)