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 件のコメント:
コメントを投稿