SRM442 DIV2 過去問

問題 結果 備考
250 238.74pt
500 解説見てから解いた
1000

250 - SimpleWordGame

問題文
『playerの言った単語がdictionaryの中にあったら(文字数^2)点が貰える。合計点数を返せ。でも同じの2回言っても点数にならないよ』


そのまま書いた。

public class SimpleWordGame {
    public int points(String[] player, String[] dic) {
        int res = 0;
        HashSet<String> hs = new HashSet<String>();
        for(String s : player) hs.add(s);
        for(String s : dic){
            if(hs.contains(s))
                res += s.length() * s.length();
        }
        return res;
    }
}

500 - Underprimes

問題文
『ある数nを素数の積で表すとき、かける素数の数が素数ならその数をUnderprimeと呼ぶ。A,B間のUnderprimeの数を返せ。ただし1はUnderprimeじゃないよ』
うーん日本語でおk

primefactors[primefactors[i]]==0

でUnderprimeかどうか分かる.

  • エラトステネスのふるいみたいなものを使う
  • DP使って解いてる人もいた
public class Underprimes {
    public int howMany(int A, int B) {
        int res = 0;
        int[] ec = new int[B+1];
        ec[0] = 1; ec[1] = 1;
        for(int i=2; i<=B; i++){
            if(ec[i]==0){
                for(int j=i*2; j<=B; j+=i){
                    for(int k=j; k%i==0; k/=i)
                        ec[j]++;
                }
            }
        }
        for(int i=A; i<=B; i++){
            if(ec[ec[i]]==0) res++;
        }
        return res;
    }
}

メモ

  • 1000はあとで