很有意思的交互题
给定n*n的棋盘,有三个数123可供选择填,要求是任意格子的上下左右不能和本格相同。
每次给一个数,要求本次填写不能用该数。
考虑到两个数字的符合情况的解
1 2 1 2
2 1 2 1
1 2 1 2
2 1 2 1
那么结论就是
不让我们用1,我们就填2
不让我们用2,我们就填1
不让我们用3,啊,那不用就不用嘛。
这样肯定是符合条件的,对吧。
这时候就有一个问题了 不让我们用1,我们就填2,可是2的所有位置都填满了怎么办
那就在1的位置上填3,填满的2已经帮我们阻隔了所有1位置。
同理,不让我们用2,我们就填1,1位置填满了咋办,在2的位置上填3就好了
vector<pair<int,int>>v[5]; void print(int col,pair<int,int> x){ cout<<col<<" "<<x.first<<" "<<x.second<<endl; } void solve(){ cin>>n; for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j){ v[(i+j)%2].push_back({i,j}); } } for(int i=1;i<=n*n;++i){ int x;cin>>x; if(x==1){ if(v[1].size()){ print(2,v[1].back()); v[1].pop_back(); } else{ print(3,v[0].back()); v[0].pop_back(); } } else if(x==2){ if(v[0].size()){ print(1,v[0].back()); v[0].pop_back(); } else{ print(3,v[1].back()); v[1].pop_back(); } } else{ if(v[0].size()){ print(1,v[0].back()); v[0].pop_back(); } else{ print(2,v[1].back()); v[1].pop_back(); } } } }