比赛 EYOI与SBOI开学欢乐赛12th 评测结果 AAAAAAAAAA
题目名称 数字的游戏 最终得分 100
用户昵称 lihaoze 运行时间 0.949 s
代码语言 C++ 内存使用 9.55 MiB
提交时间 2022-10-17 19:51:58
显示代码纯文本
#include <bits/stdc++.h>

const int N = 1e6 + 10;
int f[N];

int max(int n) {
	int ret = -1;
	while (n) {
		int now = n % 10; n /= 10;
		if (now) ret = std::max(ret, now);
	}
	return ret;
}

int min(int n) {
	int ret = 10;
	while (n) {
		int now = n % 10; n /= 10;
		if (now) ret = std::min(ret, now);
	}
	return ret;
}

int main() {
	freopen("cdgame.in", "r", stdin); 
	freopen("cdgame.out", "w", stdout);
	f[0] = f[10] = 0;
	for (int i = 1; i <= 9; ++ i) f[i] = 1;
	for (int i = 11; i <= N - 10; ++ i) 
		// if there's win, then win, if both defeated, then defeated
		f[i] = (f[i - max(i)] && f[i - min(i)]) ^ 1;
	std::string ans[] = { "NO", "YES" };
	int tt; std::cin >> tt;
	while (tt --) {
		int n; std::cin >> n;
		std::cout << ans[f[n]] << '\n';
	}
	return 0;
}