SRM459 DIV2

rate 1003->949

  (^ω^;)⊃ アウアウ!! 
 ⊂ミ⊃ ) 
  /   ヽ
問題 結果 備考
250 passed system test 154.67pt
500 opened
1000 opened

250 - RecursiveFigures

問題文
『正方形に内接する円を書く→その円に内接する正方形を書く、を指定回数繰り返したとき塗りつぶされてる面積を返せ』


そのままがりがり書くだけなーのにー
なーんでこんなーにー時間かーかってるーのーー

public class RecursiveFigures {
    public double getArea(int s, int K) {
	double sa = s;
	double pi = Math.PI;
	double res = (sa/2.0)*(sa/2.0)*pi;
	double r2 = Math.sqrt(2);

	for(int i=1; i<K; i++){
	    sa = (sa/r2);
	    res -= sa*sa;
	    res += (sa/2.0)*(sa/2.0)*pi;
	}
        return res;
    }
}

500 - Inequalities

問題文
『"X <不等号or等号> <1-1000の整数>"という式が何個か与えられる。最も多くの式が満たされるときの数を返せ。Xは負の数や実数でもいいよ』

  • 全部の組み合わせを考える?
  • いやこれとんでもない数になるよね
  • Xに入るのは-1から1001まで……
  • えーっと、あれ?
  • 残り20分くらいだし眠くて頭が回らないからもう諦めよう


翌日解き直したらえらい簡単だった。もったいない。

  • Xが取りうる値を全部調べて、式を満たす数を見ていけばいい
  • 実数も入るので10倍
public class Inequalities {
    public int maximumSubset(String[] ine) {
        int res = -1;
	for(int i=-5; i<=10005; i+=5){
	    int n = 0;
	    for(int j=0; j<ine.length; j++){
		int I = Integer.parseInt(ine[j].substring(ine[j].lastIndexOf(" ")+1))*10;
		String s = ine[j].substring(ine[j].indexOf(" ")+1, ine[j].lastIndexOf(" "));
		if(s.equals("="))
		    if(i==I) n++;
		if(s.equals("<"))
		    if(i<I) n++;
		if(s.equals("<="))
		    if(i<=I) n++;
		if(s.equals(">"))
		    if(i>I) n++;
		if(s.equals(">="))
		    if(i>=I) n++;
	    }
	    if(res<n)
		res = n;
	}
        return res;
    }
}

メモ

  • 下がりすぎわろえない
  • 500はしっかり解いておきたい……というか250もっとはやく!!!!
  • lastIndexOf()