コードがかなり短い。
https://yukicoder.me/problems/no/3430
問題
H*Wのグリッドがあり、各セルには0/1のいずれかが書かれている。
2*2の領域を指定し、0/1を反転させることを任意回数行えるとする。
この時、全セルの値の総和の最小値を求めよ。
解法
処理により、各行・列における1の数の偶奇は変化しない。
また、各行・列の1の数は0個か1個にそろえることができる。
その結果、解はmax(1が奇数個の列の数,1が奇数個の行の数)となる。
int H,W; int R[2020],C[2020]; void solve() { int i,j,k,l,r,x,y; string s; cin>>H>>W; FOR(y,H) FOR(x,W) { cin>>k; R[y]^=k; C[x]^=k; } x=y=0; FOR(i,H) y+=R[i]; FOR(i,W) x+=C[i]; cout<<max(x,y)<<endl; }
まとめ
皆証明まできっちりやって提出したのかな?