うーん、近いところまで行ったのに。
https://atcoder.jp/contests/arc140/tasks/arc140_e
問題
H*Wのグリッドの各マスに、1~25の値を埋めることを考える。
軸に平行な矩形領域を取ったとき、四つ角にある値がすべて一致するようなものが1つも存在しないように値を埋めよ。
H,Wは500以下とする。
解法
最大ケースで条件を満たせば、より小さいケースでも条件を満たす。
よって最大ケースだけ考えればよい。
25以下で最大の素数P=23を使い、r行c列の値A[r][c]を以下のようにしよう。
A[r][c] = (floor(r/P)*floor(c/P)+r+c)%P + 1
int H,W; void solve() { int i,j,k,l,r,x,y; string s; cin>>H>>W; int p=23; FOR(y,H) { FOR(x,W) { r=((x/p)*(y/p)+x+y)%p; cout<<r+1<<" "; } cout<<endl; } }
まとめ
25や500という整数に引っ張られる問題。