取石子(C++)

题目描述

Bessie 和 Elsie 正在使用一堆初始时共 S 个石子(S的位数不超过100000位)进行一个游戏。两头奶牛依次行动,Bessie 先行动。当轮到一头奶牛行动时,她必须从堆中取走 x 个石子,其中 x 是该奶牛选定的任意正整数回文数。如果当一头奶牛的回合开始时石子堆是空的,那么这头奶牛就输了。

定义:一个正整数如果从前向后和从后向前读相同,则该数为回文数;回文数的例子有 1,121 和 9009。数不允许有前导零;例如,990 不是回文数。

有 T(1≤T≤10)个独立的测试用例。对于每一个测试用例,输出如果两头奶牛都采取最优策略,谁会赢得游戏。

输入格式

输入的第一行包含 T,为测试用例的数量。以下 T 行为测试用例,每个测试用例一行。 每个测试用例均由一个整数 S 指定。

输出格式

对于每一个测试用例输出一行,如果 Bessie 在最优策略下可以从一堆 S 个石子的石子堆开始赢得游戏,则输出 B,否则输出 E。

输入样例

复制代码
3
8
10
12

输出样例

复制代码
B
E
B

样例解释

对于第一个测试用例,Bessie 可以在第一次行动中取走所有石子,因为 8 是回文数,使她获胜。

对于第二个测试用例,10 不是回文数,因此 Bessie 无法在第一次行动中取走所有石子。无论 Bessie 第一回合取走多少石子,Elsie 总能在第二回合取走所有余下的石子,使她获胜。

对于第三个测试用例,可以证明在最优策略下 Bessie 可以获胜。

测试点性质

测试点 2-4:S < 100 。

测试点 5-7:S < 10^6。

测试点 8-10:S < 10^9。

测试点 11-13:没有额外限制。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int t;
string s;

int main() {
	scanf("%d", &t);
	for (int i = 1; i <= t; i++) {
		cin >> s;
		int q = s.size();
		if (q <= 1) cout << "B" << endl;
		if (q == 2) {
			if (s[1] != '0') cout << "B" << endl;
			else cout << "E" << endl;
		}
		if (q > 2) {
			if (s[q-1] != '0') cout << "B" << endl;
			else cout << "E" << endl;
		}
	}



	return 0;
}
相关推荐
啊啊啊啊啊!!!!6 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
(Charon)9 小时前
【C++】锁与原子操作(四):自旋锁的完整实现与性能优化
c语言·开发语言·c++
ShineWinsu10 小时前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl
呜喵王阿尔萨斯11 小时前
extern “C“ in C++
c语言·c++·算法
乐观勇敢坚强的老彭11 小时前
C++信奥静态数组和动态数组
数据结构·c++·算法
gumichef12 小时前
第一章:面向对象核心——类和对象深度讲解
开发语言·c++
ao-weilai12 小时前
C++基础:类和对象
开发语言·c++
郝学胜-神的一滴12 小时前
[简化版 GAMES 104] 现代游戏引擎 04:从0到1构建你的游戏世界
c++·游戏·unity·游戏引擎·软件工程·unreal engine
Bryce学亮12 小时前
FileLine,基于 Qt 6 + QML 构建的跨平台文件传输与即时通讯工具
数据库·c++·人工智能·python·qt·github
旖旎夜光12 小时前
LeetCode 991: 坏了的计算器(贪心算法) —— 题解
数据结构·c++·算法·leetcode·贪心算法