Dで謎ハマリしてえらいことに…。
https://codeforces.com/contest/1804/problem/D
問題
N階建ての建物があり、各フロアは窓M個分の広さがある。
各窓が明るいかどうかが与えられている。
各フロアに、窓1個分の部屋M/2個と、窓2個分の部屋M/4個を作りたい。
部屋内のうち少なくとも1個の窓が明るければ、その部屋は明るいといえる。
条件内で部屋のレイアウトを決められるとき、明るい部屋の最小値と最大値を求めよ。
解法
フロア毎に考える。
明るい部屋を最小化するには、2つ連続明るい窓を優先的に1つの部屋にしていけばよい。
逆に明るい部屋を最大化するには、2つ連続暗い窓を優先的に1つの部屋にしていけばよい。
int H,W; string S; int mi,ma; void solve() { int i,j,k,l,r,x,y; string s; cin>>H>>W; int a1=0,a2=0; FOR(y,H) { cin>>S; FORR(c,S) if(c=='1') a1++,a2++; a2-=W/4; for(i=0,x=W/4;i<W-1&&x;i++) if(S[i]=='1'&&S[i+1]=='1') a1--,x--,i++; for(i=0,x=W/4;i<W-1&&x;i++) if(!(S[i]=='1'&&S[i+1]=='1')) a2++,x--,i++; } cout<<a1<<" "<<a2<<endl; }
まとめ
なんか変に考えすぎてしまった。