PMOI T3 游戏 sol
upd:由于洛谷出了哔哩哔哩嵌套功能,所以在这里加了一份视频题解(之前只有链接)。
官方题解
看起来没啥思路,正难则反。
考虑黑棋要怎么卡白棋。
有一个简单的方法:隔两个一堵。
比如,黑白时,你应该和第一个黑空两个格子,就是黑白空黑。
如果白棋竖着连就竖着这样堵,斜着连就斜着堵。这样一来,白棋永远赢不了。
那么白棋想赢,就要自己占上隔着两个的位置,不让黑棋下。
这时候黑棋很被动,能走的很有限。
接下来考虑必胜策略。
首先,黑空白白是 黑空白同时出现就是
容易发现,走完第一步之后,如果黑棋不走它两边的地方,那么白棋下一步即可达到必胜
如果走了,就下在 黑空白。然后就达成了一个必胜
不明白的话可以看视频题解 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;
}