SRM 494 Div2

250 InterestingParty

与えられた単語の集合から一番多く出現した単語の出現回数を求めよ。と理解。
firstとsecondがありますが、どちらも同じように扱ってよさそうでした。
なんか読み返してみるといろいろ直したくなりますね。
まあSystem Testは通過したのでOKでしょう。

import java.util.Map;
import java.util.HashMap;
public class InterestingParty {
	private Map<String, Integer> statistic;

	public int bestInvitation(String[] first, String[] second) {
		statistic = new HashMap<String, Integer>();
		int max = 0;
		for(String interest : first) {
			max = Math.max(max, count(interest));
		}
		for(String interest : second) {
			max = Math.max(max, count(interest));
		}
		return max;
	}
	
	private int count(String interest) {
		if(!statistic.containsKey(interest)) {
			statistic.put(interest, 0);
		}
		int count = statistic.get(interest)+1;
		statistic.put(interest, count);
		return count;
	}
}

500 Painting

白黒フィールドの黒い部分をs*sのブラシで白く塗りつぶす。一番大きいブラシの大きさを求めよ。かな?
縦横で黒マスが連続した個数の最小値を求めればいいだけかな?とか思って書いたら撃沈しました。
よく考えたら前回の250がそういう問題だったような・・・。

public class Painting {
	public int largestBrush(String[] picture) {
		int[] v = new int[picture[0].length()];
		int min = Math.max(picture.length, picture[0].length());
		for(int i=0; i<picture.length; i++) {
			int h = 0;
			String p = picture[i];
			for(int j=0; j<p.length(); j++) {
				if(p.charAt(j) == 'B') {
					v[j]++;
					h++;
				}
				else {
					if(h > 0) {
						min = Math.min(min, h);
						h = 0;
					}
					if(v[j] > 0) {
						min = Math.min(min, v[j]);
						v[j] = 0;
					}
				}
			}
			if(h > 0) {
				min = Math.min(min, h);
			}
		}
		
		for(int i=0; i<v.length; i++) {
			if(v[i] > 0) {
				min = Math.min(min, v[i]);
			}
		}
		
		return min;
	}
}

こういうケースに耐えられないですね。

BBB
BBB
BBW
WBB
BBB
BBB

1000 AlternatingLane

これは問題が理解できなかったです。英語力が足りない。
Google翻訳さんの力を借りても、ダメでした。
テストケースをみてなんとか頑張ってみましたが、ダメでした。
この時点で残り40分くらいあったけど、結局何もできませんでした。