1 条题解

  • 0
    @ 2025-8-24 22:29:04

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar lndjy
    退役oier,偶尔参与比赛出题,tag是我另一个身份,有人认识吗()

    搬运于2025-08-24 22:29:04,当前版本为作者最后更新于2020-09-20 07:23:44,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    upd:由于洛谷出了哔哩哔哩嵌套功能,所以在这里加了一份视频题解(之前只有链接)。

    官方题解

    看起来没啥思路,正难则反。

    考虑黑棋要怎么卡白棋。

    有一个简单的方法:隔两个一堵。

    比如,黑白时,你应该和第一个黑空两个格子,就是黑白空黑

    如果白棋竖着连就竖着这样堵,斜着连就斜着堵。这样一来,白棋永远赢不了。

    那么白棋想赢,就要自己占上隔着两个的位置,不让黑棋下。

    这时候黑棋很被动,能走的很有限。

    接下来考虑必胜策略。

    首先,黑空白白11 步必胜的,我们叫它必胜 11。所以,两个黑空白同时出现就是 22 步必胜的,我们叫它必胜 22

    容易发现,走完第一步之后,如果黑棋不走它两边的地方,那么白棋下一步即可达到必胜 11

    如果走了,就下在 (2,2)(2,2)。这时,它与 (0,0)(0,0)(2,0)(2,0)(4,0)(4,0) (即白棋第一步的两边)都组成了一个黑空白。然后就达成了一个必胜 22。所以,最多 44 步即可胜利。

    不明白的话可以看视频题解 https://www.bilibili.com/video/bv1jr4y1N7iA

    std:

    #include<iostream>
    using namespace std;
    int x,y;
    int main()
    {
    	int T;
    	cin>>T;
    	while(T--)
    	{
    		cout<<"3 0"<<endl;
    		cin>>x>>y;
    		if(x==2&&y==0)
    		{
    			cout<<"2 2"<<endl;
    			cin>>x>>y;
    			if(x==2)
    			{
    				cout<<"3 3"<<endl;
    				cin>>x>>y;
    				if(x==1&&y==1)
    				cout<<"4 4"<<endl;
    				else cout<<"1 1"<<endl;
    			}
    			else
    			{
    				cout<<"2 3"<<endl;
    				cin>>x>>y;
    				if(x==2&&y==1)
    				cout<<"2 4"<<endl;
    				else cout<<"2 1"<<endl;
    			}
    		}
    		else if(x==4&&y==0)
    		{
    			cout<<"2 2"<<endl;
    			cin>>x>>y;
    			if(x+y==4)
    			{
    				cout<<"3 3"<<endl;
    				cin>>x>>y;
    				if(x==1&&y==1) cout<<"4 4"<<endl;
    				else cout<<"1 1"<<endl;
    			}
    			else
    			{
    				cout<<"1 3"<<endl;
    				cin>>x>>y;
    				if(x==3&&y==1) cout<<"0 4"<<endl;
    				else cout<<"3 1"<<endl;
    			}
    		}
    		else if(x==1&&y==0)
    		{
    			cout<<"4 0"<<endl;
    			cin>>x>>y;
    			if(x==2&&y==0) cout<<"5 0"<<endl;
    			else cout<<"2 0"<<endl;
    		}
    		else
    		{
    			cout<<"2 0"<<endl;
    			cin>>x>>y;
    			if(x==1&&y==0) cout<<"4 0"<<endl;
    			else cout<<"1 0"<<endl;
    		}
    	}
     	return 0;
    }
    
    • 1

    信息

    ID
    6348
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    0
    已通过
    0
    上传者