Hatena::Grouptopcoder

niha SRM

2010-05-26

member SRM 05:54

トラブルっちゃいましたね。

問題読み違え(そもそもちゃんと読んでない…)で 250 に滅茶苦茶時間かけちゃったので、ちょっとラッキーかもしれない!

多分 250 はこんなのでいいはず。

isPrime n = all (\i -> n `mod` i /= 0) $ takeWhile (\i -> i ^ 2 <= n) [2..]
solve n = length $ filter isPrime $ takeWhile (0 <) [n `div` 2 ^ i | i <- [1..]]

Haskell ですけども…てきとーーーーー

C++ のコードは「コンパイルできない!?」ってなって焦ってるときに、色々やってて間違えて消しちゃいました…開始前に TZTester を新しくしたのでそのせいかなーと思って大慌てしてたら、サーバーさんがお亡くなり。びっくりしました。

最大入力が 10,000,000 で、filter するリストの長さが log N で、isPrime が √N なので log N * √N で最大ケースでもまあ問題なさそう。手元のテストは問題なかった。サーバーさんでテストできませんでしたが…多分大丈夫。

KentKent2013/02/17 08:01This was so hepflul and easy! Do you have any articles on rehab?

bjcosxmrbjcosxmr2013/02/17 22:48exEzR3 <a href="http://ttqvumtirard.com/">ttqvumtirard</a>

rxfjouwrxfjouw2013/02/19 20:22YVSt86 , [url=http://wncvwxzunejm.com/]wncvwxzunejm[/url], [link=http://rbsxdwbygjja.com/]rbsxdwbygjja[/link], http://wfngsbfljvyr.com/

2010-05-20

SRM 470 02:32

居眠りで酷くスコアを落としまくってから、一年以上経ったんだろうか。ものすごく久しぶりに参加した。

250 は問題文の「All cities will be collinear」にどれだけ早く気がつけるかが勝負の問題だったと思う。

いやこれめちゃくちゃ難しいぞ…どうなってんの…??と思いつつ、一所懸命にサンプルとにらめっこしてたら、一直線にならんでることに気がついて、 sort して abs(front - back) で終了。あんまりだー。

ていうかタイトルで気づくべきだったんだろうか。英語さんと仲良くなって瞬殺できるようにならないといけないなあこういうのは…はあ。

500 は兎に角問題文が長くて、ずうと読んで読んで、分からないのでサンプル一個一個通すゲーやって、通らなくって、読んで読んで、ってやってるうちに時間切れ。泣きたい。

すごく嫌な気分になったのでお風呂を洗うことにした。

戻ってきたらちゃらんげたいむで、250 で sort を x しか見ずにしてる人がいたのでちゃらんげして撃墜。

825 → 915 で灰色から緑色に。情けにゃい。

英語でぐにゃぐにゃするだけの回は楽しくないなあ…有り体にいうと苦痛です。

2010-04-21

書くだけ 20:47

SRM 467 DIV2 250

書くだけ。

なんだけれど、最初 (n + 1) * n / 2 をちょっと調子のって -~n * (n / 2) とかかいてて最初通らず。

かっこ悪い…

デザインをかえた 16:13

スーパー pre 記法が死んでたのでデザインをかえた

いきかえった…

pre { line-height: 1; } で見やすくなた!

時間かかりすぎでげす 16:00

SRM 468 DIV2 500

問題文長すぎで全然解き始められなかったうえに

  • find_if と find の書き間違え
  • "ace" は "112" でなく "223" な罠
  • map の iterate が pair なこと

ひっかかりそうなところは全部引っかかったぜ…

あと bind2nd と bind1st も間違えた。最初 string -> string -> bool だったのを途中で書き直したから…

bool include(string str, char ch){
  return find(ALL(str), ch) != str.end();
}

bool isNumber(char ch){
  return '0' <= ch && ch <= '9';
}

bool isNotNumber(char ch){
  return !('0' <= ch && ch <= '9');
}

class T9 {
public:
  string message(vector <string> part, vector <string> dict, vector <string> keystr) {
    map<string, vector<string> > dictOfNums;
    FOREACH(i, dict) {
      string tmp;
      FOREACH(j, *i) {
        tmp.push_back('1' + distance(part.begin(), find_if(ALL(part), bind2nd(ptr_fun(include), *j))));
      }
      dictOfNums[tmp].push_back(*i);
    }

    FOREACH(i, dictOfNums) {
      sort(i->second.begin(), i->second.end());
    }

    string str = accumulate(ALL(keystr), std::string(""));
    string::iterator it;
    while ((it = find(ALL(str), '*')) != str.end()) {
      str.replace(it, it + 1, 5, '#');
    }

    while ((it = find(ALL(str), '0')) != str.end()) {
      str.replace(it, it + 1, " ");
    }

    string::iterator h, t, e;
    while ((h = find_if(ALL(str), isNumber)) != str.end()) {
      t = find_if(h, str.end(), isNotNumber);
      e = find(t, str.end(), ' ');
      string key(h, t);
      string sharp(t, e);
      str.replace(h, e, dictOfNums[key][sharp.size()]);
    }

    return str;
  }
};

書きながら思ったけれどこれ多分テーブルとか作らなくても時間余裕なんだよなあ。でもごちゃっと実装するの苦手だからなあ…

昨日は 14:14

どうかしてた

bool comp(pair<int, int> l, pair<int, int> r){
  return l.second > r.second;
}

bool pred(pair<int, int> v){
  return v.second < 1;
}

class RoadOrFlightEasy {
public:
  int minTime(int N, vector <int> roadTime, vector <int> flightTime, int K) {
    vector< pair</*index*/int, int> > vs;
    for (int i = 0; i < N; i++) {
      vs.push_back(make_pair(i, roadTime[i] - flightTime[i]));
    }

    partial_sort(ALL(vs), vs.begin() + K, comp);
    vs.erase(vs.begin() + K, vs.end());
    vs.erase(remove_if(ALL(vs), pred), vs.end());

    FOREACH(i, vs) {
      roadTime[i->first] = flightTime[i->first];
    }

    return accumulate(ALL(roadTime), 0);
  }
};

2010-04-20

ばびょーん 22:42

復活です。SRM 468 参加できませんでしたが、終わった後にリハビリで少しだけやりました。

ていうかやばいはてな記法が分からない。やばい。

SRM 468 DIV2 です。

  • 問題読む
  • よくわからない
  • うーん
  • そうだ入出力をまず見るんだった(違います)
  • わかった!!
  • C++ ってどうやって書くんだっけなー
  • まあ普通に書こう
  • (久しぶり過ぎて感覚狂うなあ)
  • (とりあえ K が 0 と N の時だけ書こう。いらない気もする)
  • diff 取って部分ソートしてやればいいよなあ…)
  • (partial_sort のソートする数って第何引数だったっけ…)
  • (あー 0 より小さいのはダメだな…delete_if も)
  • かけたー
  • コンパイル→エラー
  • あーー comp の引数がコンテナ型のままだあほ
  • コンパイル→エラー
  • あーー pred の引数がコンテナ型のままだあほ
  • コンパイル→おめでとう!
  • テスト→テスト結果の見方が分からないなう
  • うーん…?
  • (5 分ほどあくせくする)
  • よくわからないので submit

ということでできたコード。168 点でした。私はゴミです。

bool comp(pair<int, int> l, pair<int, int> r){
  return l.second - r.second;
}

bool pred(pair<int, int> v){
  return v.second < 1;
}

class RoadOrFlightEasy {
public:
  int minTime(int N, vector <int> roadTime, vector <int> flightTime, int K) {
    if (K == 0) return accumulate(ALL(roadTime), 0);
    if (K == N) return accumulate(ALL(flightTime), 0);

    vector< pair</*index*/int, int> > vs;
    for (int i = 0; i < N; i++) {
      vs.push_back(make_pair(i, flightTime[i] - roadTime[i]));
    }

    partial_sort(ALL(vs), vs.begin() + K, comp);
    remove_if(ALL(vs), pred);

    vector<int> vals(N, 0);
    FOREACH(i, vs) {
      int index = i->first;
      vals[index] = flightTime[index];
    }

    for (int i = 0; i < N; i++) {
      if (vals[i] == 0) {
        vals[i] = roadTime[i];
      }
    }

    return accumulate(ALL(vals), 0);
  }
};

"return l.second - r.second;" はちょっとひどいって思うな…

ていうか "vals[i->first] = i->second" じゃね…

頭が痛いんです!!!

vals いらんな roadTime を書き換えていけばいい…

俺はダメだ!!!

あれこれは全然ダメだぞ…

"vals[i->first] = i->second" じゃないよ!あと partial_sort した後いらない部分 erase してない。

K == N もだめ…

ぎゃぼー

2009-03-24

だめらー 02:42

  • 寝る宣言
  • suztomo さんにSRMだよーと教えてもらう
  • しらんがなー ^q^
  • register
  • enter ... アプレット落ちたー ^q^
  • enter
  • 500 open
  • sleeeeeeeeeeeeeeeeeeeeeep
  • wake up!

おはよー!

多分 08:33

  • 0入ってる時とか10以下はまあ適当に。
  • vec<int> v と m つくる
  • sort m
  • reverse v m
  • ここから↓を k 回ループ
  • m と v を比較
  • 違う部分があったら、そこより後ろにある一番大きい要素で、一番最後にある要素を違う部分と交換
  • i = mismatch(RAN(v), m.begin()).first; j = max_element(i+1, v.end()); j = find_end(i+1,v.end(),j,j+1); iter_swap(i,j);
  • なかったら、仕方ないので最後の二つを適当に入れ替える。
  • iter_swap(v.rbegin(), v.rbegin()+1);

とかでいいんじゃないかなー DIV2 500 は…おはようございます。250 とか見てねえよ!ぎゃー!

あとでやる…

だめらしいよ 09:39

次は頑張りましょう。

くやしーので 250 やるよー 09:50

  • ふむ
  • n.to_s.uniq.size ですね、分かります。
  • おわた。

243点。