シンプルな問題設定。
https://codeforces.com/contest/1179/problem/B
問題
グリッドのサイズH*Wが与えられる。
今左上のセルに駒を置いておき、駒を全セル1回ずつ通るように移動させることを考える。
その際、移動前後の相対的な座標の差が、毎回異なるパターンとなるようなケースを構築せよ。
解法
中心に対し点対称を描くことを意識すると、同じパターンが2度現れない。
以下のコードでは、(1,1)(H,W)(2,1)(H-1,W)...(H,1)(1,W)(ここまで左端列と右端列を交互に動く)(1,2)(H,-1)...(端から2列目を左右交互に動く…)という感じで移動している。
int H,W; void solve() { int i,j,k,l,r,x,y; string s; cin>>H>>W; int L=1,R=W; while(L<R) { for(y=1;y<=H;y++) { _P("%d %d\n",y,L); _P("%d %d\n",H+1-y,R); } L++; R--; } if(L==R) { x=L; L=1,R=H; while(L<R) { _P("%d %d\n",L,x); _P("%d %d\n",R,x); L++; R--; } if(L==R) _P("%d %d\n",L,x); } }
まとめ
色んな解法がありそうね。