250 チャレンジ
500 未提出
1000 未提出
1問も解けなく、点数はもちろん0なわけですが、レートは955というそれなりに高いという結果に。いきなり緑。
どうやら250の正解率が低かったみたい。
修正済み250
public class BadVocabulary { public int count(String badPrefix, String badSuffix, String badSubstring, String[] vocabulary) { int bad = 0; for(String word : vocabulary) { //pre if(word.length() >= badPrefix.length()) { if(word.substring(0, badPrefix.length()).equals(badPrefix)) { bad++; continue; } } //suf if(word.length() >= badSuffix.length()) { if(word.substring(word.length() - badSuffix.length()).equals(badSuffix)) { bad++; continue; } } //sub if(word.length() >= badSubstring.length() + 2) { boolean flag = false; for(int i = 1; i < word.length() - badSubstring.length(); i++) { if(word.substring(i, i + badSubstring.length()).equals(badSubstring)) { bad++; flag = true; break; } } if(flag) { continue; } } } return bad; } }250を落とした理由はcontinueを書かなかったので、多めの結果を返していたからでした。
はっきり言って問題の読み間違いですね。ほかの人が間違えてるとこと別のとこで間違えてた。アホス
500
public class BuyingFlowers { public int buy(int[] roses, int[] lilies) { int min = Integer.MAX_VALUE; for(int mask = 1; mask < (1 << roses.length); mask++) { int rose = 0; int lily = 0; for(int i = 0; i < roses.length; i++) { if((mask & (1 << i)) > 0) { rose += roses[i]; lily += lilies[i]; } } if(Math.abs(rose - lily) > 1) continue; int area = rose + lily; for(int l = 1; l * l <= area; l++) { if(area % l == 0) { min = Math.min(min, Math.abs(l - area / l)); } } } if(min == Integer.MAX_VALUE) return -1; else return min; } }問題は理解したけどどうやって解いていいかわからず。
全パターン調べるのってこうやってやるんですね。これは正直知らないとできない・・・
こういうテクニックってどこで教えてもらえるんですか・・・プログラミングコンテストチャレンジブック買えばいいんですか?
0 件のコメント:
コメントを投稿