1 条题解

  • 0
    @ 2025-8-24 22:55:34

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar cff_0102
    & aqua_qaq | 团子群 185800038 | 如果我死了说明我 AFO 了

    搬运于2025-08-24 22:55:34,当前版本为作者最后更新于2024-02-29 00:16:52,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    不难发现所有整除 1010,即以 00 结尾的正整数都不是回文数。

    因为 1,2,3,4,5,6,7,8,91,2,3,4,5,6,7,8,9 都是回文数,而 1010 不是,所以当 n9n\le9 时先手必胜,而 n=10n=10 时先手必输。

    假设 xx 整除 1010,且已知对于所有的 nxn\le x,当 nn 整除 1010 时先手输,否则先手赢。显然,x=10x=10 时满足条件。接下来证明:对于任意的 xx,当 xx 满足条件时,x+10x+10 也满足条件。

    • x<n<x+10x<n<x+10 时,因为 1,2,3,4,5,6,7,8,91,2,3,4,5,6,7,8,9 都是回文数,所以先手可以取走任意的在 1199 之间的数量的石子。此时先手必能一次将 nn 变为 xx。而根据假设,xx 整除 1010,是必输局面。所以当 x<n<x+10x<n<x+10 时,先手可以取一次将局面变成必输局面,接下来后手怎么取都会输,所以先手赢。
    • n=x+10n=x+10 时,因为根据假设,所有小于 nn 的不整除 1010 的数是必胜的,那么先手要是取完之后剩下的 nn 不整除 1010,后手就会有必胜策略,先手就输了。然而,因为所有整除 1010 的正整数都不是回文数,所以先手不可能取走一个整除 1010 的数,从而剩下的局面就必然不整除 1010。因此,此时先手是必输的。

    现在就成功证明了“若 xx 整除 1010,且对于所有的 nxn\le x,当 nn 整除 1010 时先手输,否则先手赢,那么此时对于所有的 nx+10n\le x+10,当 nn 整除 1010 时先手输,否则先手赢”。而我们又知道 x=10x=10 时满足条件,所以所有的 xx 都满足条件,所以只要 nn 整除 1010 就先手输,否则先手赢。

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	ios::sync_with_stdio(0);cin.tie(0);
    	int t;cin>>t;while(t--){
    		string s;cin>>s;
    		if(s.back()=='0')cout<<"E\n";
    		else cout<<"B\n";
    	} 
    	return 0;
    }
    
    • 1

    信息

    ID
    9817
    时间
    2000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者