2010年09月16日

    SRM482 Div2

    今回は500pできそうだったのにっ!

    275p AverageAverage 229.58p

    与えられた配列の「部分配列における平均」の平均を求める問題。気づいたら一発。

    メモ用紙に平均出す式書いて式変形したら・・・あらふしぎ元の平均とおんなじじゃーん。というわけで相当時間無駄にしてしまったorz

    #include <iostream>
    #include <vector>
    #include <numeric>
    using namespace std;
    class AverageAverage {
    public:
        double average(vector <int> nl) {
            double sum=(double)accumulate(nl.begin(),nl.end(),0);
            return sum/nl.size();
        }
    };
    

    500p LockersDivTwo (Compiled)

    1からN番目までのロッカーを道を作りながら順番に開けていく問題。このときn番目の道は開いていないn+1番目のロッカーを開けるようにつくる。

    vectorに1からNまで格納して要素が1個になるまで消していけばいい。ここでeraseを下手に使ったのが運のつき。イテレータに悩まされて結局提出できず。。。

    消そうとするからいけないんだ!ということで消さない方をpush_backすればいいとはやく気づいていれば。

    #include <iostream>
    #include <vector>
    using namespace std;
    class LockersDivTwo {
    public:
        int lastOpened(int N) {
            int turn=1;
            vector<int> a,b;
            for(int i=1;i<=N;++i) a.push_back(i);
            while(a.size()>1){
                turn++;
                b = a; a.clear();
                for(int i=0;i<b.size();++i)
                    if(i%turn!=0) a.push_back(a[i]);
            }
            return a[0];
        }
    };
    

    消す方もあとで書いておきたいな。

    900p BaseConfusion Opened

    Daveが14→112って書いてたのは理解。B進数に直してる感じっぽい。でもEarlがやってることがわからない・・・

    後日解いたら追記しま。

    challenge

    頭がまったく働いていなかったので適当にやったらあえなく不発。-25



    tanitanin at 03:44|PermalinkComments(0)TrackBack(0)TopCoder | プログラミング

    2010年09月10日

    SRM481 Div2

    今回はSystemTestがゴタゴタで大変なことに。何回もシステムテストやりなおしてたけど何があったんだろう。

    レーティングはちょっとだけ上がったけど、イマイチな感じ。

    250p CircleMarket 172.52p

    円形の市場を時計回りにまわって開店時間内にどれだけのアイテムを買うことができるかという問題。

    問題のとおりにやったけど時間かけすぎた。

    200p以上はとりたかったなぁ。。。実装力を身につけたいところ。

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    class CircleMarket {
    public:
        int makePurchases(vector <int> openTime, vector <int> closeTime, int travelTime) {
            int res=0,total=0;
            int n = openTime.size();
            vector<bool> vis(n,false);
            while(1){
                bool f=true;
                for(int i=0;i<n;++i){
                    if(total>=openTime[i]&&total<=closeTime[i]&&!vis[i]){ res++; vis[i]=true; }
                    if(total>closeTime[i]&&f) f=true; else f=false;
                    total+=travelTime;
                }
                if(res>=n) break;
                if(f) break;
            }
            return res;
        }
    };
    

    500p ChickenOracle (Compiled)

    預言者が鶏と卵問題の答えをn人に教え、そのn人からの答えを元に預言を当てる問題。全体数、「卵」と答えた人の数、預言者が嘘を教えた人数、嘘をついた人数が与えられてるっと。

    とりあえずlieCountとliarCountが0のときを分岐させてみて、それからliarがいるときとか考えようとしたけど結局うまくいかず。紙にベン図とか描いていろいろ考えて、lieCountとliarCoutとその共通部分で3重ループの作ったけどテストケース通せなくてオワタ。

    やりなおして後で載せるっぽ。

    900p BatchSystem Unopened

    解いていません。

    challenge

    今回もパス。コーナーケースとか考える余裕なかったので。。。



    tanitanin at 20:10|PermalinkComments(0)TrackBack(0)TopCoder | プログラミング

    2010年09月07日

    今後の予定

    最近まったく更新が途絶えていたので、いろいろと今後の予定などを書き連ねてみたいと思います。

    ちなみにだいぶ飽和状態です。予定は未定。



    夏休みに終わらせたいこと

    ・独習C++を終わらせる
    ・Schemeの予習をする
    ・自宅サーバーを構築してみるなど
    ・スクリプト言語つかいたい
    ・Topcoderのレート上げたい
    ・AVRでI2CとかXBeeとか
    ・リンク機構のお勉強


    近い将来やりたいこと

    ・Javaに手を出す
    ・ネットワークプログラミング
    ・Haskellと戯れる
    ・えとせとら


    まだまだいろいろあるので割愛。

    とりあえずVMWare serverなど入れてみたはいいものの使えなくて困っているところです。
    httpsとかwindows7には天敵です。

    tanitanin at 10:21|PermalinkComments(0)TrackBack(0)日記