1 条题解

  • 0
    @ 2025-8-24 22:36:21

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar stntn
    假如再也见不到你,祝你早安,午安,晚安。

    搬运于2025-08-24 22:36:21,当前版本为作者最后更新于2022-02-12 19:33:55,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    题目链接

    link

    题目大意

    六个棋子,分布于数轴上六个位置,颜色从左至右依次为 BBWWBB,两名玩家轮流操作己方棋子,左移或右移一个单位长度,直到一方无棋可动,另一方获胜。

    分析

    观察&猜测

    首先,观察询问,题目只需要回答游戏是否会无限进行下去,所以我们无需考虑具体过程。

    仔细阅读样例解释,出题人分别举了两种结果各一个例子

    1. W 被 B 全数消灭,输出 No
    2. W 逃脱,输出 Yes

    由此我们可以大致猜测,因为 W 棋子少于 B 棋子,所以结果不是 W 被全数消灭,就是 W 成功逃脱,不存在 B 被 W 消灭的情况

    分情况讨论

    是否存在一种情况使得 B 被 W 尽数消灭呢?我们看下图

    显而易见,对于单颗 W ,要么主动送死,要么与 B 换子

    显然,若 W 坐以待毙,左右的 B 迟早会强迫 W 与之换子(如上图第二块),此时 B 获胜。所以,W 必须主动出击

    W 很容易就能形成 WW,此时可以与黑强制换一子(如上图),但此后又陷入了图一的情况。

    难道 W 就不可能逃脱吗?肯定不是,再次观察样例解释2,出现了以下情况:

    关键:先手 W 并且有 W 与一个且仅有一个 B 相邻(与两个 B 相邻,见图2),此时,W 便可以顺利逃脱。

    这里可能有读者有疑问:在上图第二步时如果后方 B 追上来怎么办。

    因为这里是两个 W 移动,所以移动速度平均为 1/21/2 格,而后方同样为两个 B,所以相对静止(如果只有一个 B 追上来并不能强迫 W 换子)。

    另外还有一种情况:

    不言而喻

    结论

    因为 W 逃脱条件更少,我们判 W 是否能顺利逃脱。

    • W 先手
    • 开局有且仅有一个 B 与 W 相邻

    Code

    #include<bits/stdc++.h>
    int pos[7],T;char c;
    signed main()
    {
    	std::ios::sync_with_stdio(false);
    	std::cin.tie(0);std::cout.tie(0);
    	std::cin>>T;
    	while(T--)
    	{
    		std::cin>>c;
    		for(int i=1;i<=6;i++) std::cin>>pos[i];
    		if ((c=='W')//W 先手
    		&& ((pos[3]-pos[2]==1&&pos[2]-pos[1]>1)
    		||  (pos[5]-pos[4]==1&&pos[6]-pos[5]>1))//有
    		&&(!(pos[3]-pos[2]==1&&pos[5]-pos[4]==1)))//且仅有一侧与W相邻
    			 std::cout<<"Yes\n";
    		else std::cout<<"No\n";
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    7243
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者