あったこといろいろ

ほぼ自分用備忘録です。

RUPC2015参加記

いまさらだけど2週間くらい前にあった立命館大学競技プログラミング合宿の参加記です

day1

集合30分前頃に立命館大学到着。同じバスに乗っていた にっしーさん、ぬまさん、向日葵さんと会場へ
お昼ごはんに学内のSUBWAYに行きたかったけど、時間がなかったので断念

時間になってもなかなか始まらず暇だったのでAOJをやる


しばらくすると、人も集まりチーム決め
div2とdiv1に別れてごにょごにょした結果、2人グループを作っていた @tsukasa_diary さんと T.Nagasawa さんに混ぜてもらって無事チーム決定
Yazaten, nagasawa, tsukasa の頭文字を取った、チームYanatsuで出場することに


Aを僕とNagasawaさんが読み、Bをツカサさんが読む
Bの方針が立ったそうなのでお願いしたけれど、誤読していたようで一回休み。
そのころにはAの方針が立ってたので若干時間がかかりながら1発AC
そしてB,Cの方針が立ったツカサさんに交代し、ツカサさんが立て続けにB,CをAC
順調だったのはここまで。

Nagasawaさんと二人でD (こころぴょんぴょんするやつ) 考えてたけどわからず
ツカサさんが時間ギリギリでdpでかける! と実装し始めたけど時間切れ
3完でした。


懇親会は隣の建物で立ち食い
ツボクラさんと喋ったり、怒髪君にD問題の解法を聞けたりして楽しかった〜

宿は去年と同じ漫画喫茶。


day2

10時からindeedについてのお話がある予定だったけど、流れたので10:30くらいからチーム決め。
今日は実力の近い人同士で組むことに

とりあえずdiv1とdiv2に別れてウダウダ言っていたら、@bn_naoyuki くんから何故かチーム決めクエリが飛んできた
緑コーダー or ABC3完できる人 がその他の人の名札を引いて適当にチームを作成するやつをやった。今日は @pappagukun さんと TMさんと組むことに
s="pappagukun"+"Yazaten"+"TM" をソート後の部分文字列っぽいppttuzというチーム名で出場決定。


AをTMさん、Bを @pappagukunさん、Cを僕が読む作戦
テストケースが通らず紙デバックをしつつAをTMさんがAC
@pappagukun さんがBを書くも、バグらせてWA
交代してもらって紙コーディングが完了していたCをdp解で書いて提出→WA→区間ミスってる→WA→WA→WA→・・・・・
僕がダメなのでpappagukunさんに交代してBを書いて貰うが、思うように言っていないようだった
簡単な割にややこしくて辛そうだったので、代わりに書かせてもらってAC*1

その後はDが2800周期っぽいけど自信ないからなんとなく手がつけたくなかった。Hは解法見えてて重いだけだったから一応解く
TMさんが辞書の問題を考えてくれてたけど結局時間切れ。

2完でした。


コンテスト後は2週間ぶりくらいに再会した、くに君と話しながら駅まで移動。くにくんは懇親会不参加なので駅でお別れ

懇親会では@evimaプロやにっしープロ、@Mi_Sawaプロ、@Darseinプロに囲まれプロプロ。
競プロのこともそうじゃないことも色々話せた
SRMの英語が読めないならば沢山やって慣れるのが良いらしい。

あと、初めてきゅうりと話せた。「黄色いアイコンのヤツ」と認識してくれていたらしくちょっとうれしい


その後はMi_Sawaプロと、謎の道譲り合いをしたり、銭湯に行って怒髪君と四畳半神話大系の話とかをして楽しかった

この日の宿も漫画喫茶。


day3

集合が9~10時なので早起きして会場に到着。
会津のdiv1勢と立命のdiv2勢で2人組を作り、余った人は2人組に入れてもらう。
しかし「参加者 mod 3 == 2」だったため、会津のUraOmote(間違ってたらごめんなさい)さんと2人チームになってしまう。不安。


コンテストが始まると僕がAを、ペアがBを読む。
JIS配列 && 非IDE && テキストエディタemacs という普段と大きく違う環境に戸惑いつつ、時間をかけてAをACしてペアに交代
横から見てるとBは結構実装が重そうだったけど、すんなりBをACしてもらう
Cを読んだけど、重そうだしきゅうりチームが解いてなかったしでDに移る。

出発地点、落し物を落とした地点、届け先 のノード以外を意識して通る必要がない。
各地点間の最短距離だけを事前に計算しておく。( O( (1+k*2)*ElogV )らしい )
その後13地点を回る順番を枝刈り全探索した。
もしかしたら間に合わないかもなぁと思いながらコーディングするのはちょっとつらかった。

なんとか書き終えたのがコンテスト終了数分前で、デバッグ出力とかを消してる間にコンテスト終了。
終了後に提出したけどTLEをもらう。解法は枝刈り全探索の代わりにbitDPをするらしい。


まとめ

立命館合宿に3日間参加したけれど、自明しかとくことができなくて悔しい。
自明をバグらずに解く力は少し上がったと感じたので、この調子でAOJ-ICPCを埋めようと思う。



実は来年から立命の3回生に編入なので、来年は立命セットの作問をすることになりそう
正直ちゃんと作れるか、面白い問題にできるかが不安だけどがんばります(;_;)

*1:問題奪ってしまってごめんなさい>

東京へハッカソンに行きました

3/23[月]~3/27[金]の5日間ハッカソンへ行きました

一日目

朝ごはん

メロンパンを食べました

昼ごはん

tabelog.com

晩ごはん

ハッカソン先でピザを食べました


二日目

朝ごはん

ホテルでビュッフェ形式のやつを食べました

昼ごはん

tabelog.com

晩ごはん

tabelog.com


三日目

朝ごはん

ホテルでビュッフェ形式のやつを食べました

昼ごはん

tabelog.com

晩ごはん

tabelog.com


四日目

朝ごはん

ホテルでビュッフェ形式のやつを食べました

昼ごはん

tabelog.com

晩ごはん

tabelog.com


五日目

朝ごはん

ホテルでビュッフェ形式のやつを食べました

昼ごはん

鮭おにぎりを食べました

晩ごはん

ハッカソン先でお寿司やからあげを食べました

思い出の問題を解いた

ICPC2013国内予選Cの 階層民主主義 ( Hierarchical Democracy | Aizu Online Judge )を解きました。

f:id:Yazaten:20141228000309p:plain


2013年7月 ICPC国内予選

興味本位で出たICPC国内予選でこの問題を読み、全くもって意味がわからなかった。*1

当時は プログラミングチョットデキル と天狗になっていただけに衝撃で、なんかもやもやしたので競技プログラミングを始めることにした


問題について

問題概要は省略。
解いてからググったら深さ優先でやるのが一番スマートみたいだったけど、思いつかなかったからゴリ押しで地獄のようなコードを書いた。ゴリ押しの手順を以下に雑に示すが、おそらく読む価値はない。※括弧内は一例

  1. はじめ ( [[[1][3][5]][[11][9][7]][[15][17][13]]] )
  2. "]["を" "に置き換える ( [[[1 3 5] [11 9 7] [15 17 13]]] )
  3. 一番深い階層の選挙区それぞれを有権者数でソートする ( [[[1 3 5] [7 9 11] [13 15 17]]] )
  4. それぞれの選挙区で勝つために必要な票の最小を求め、置き換える ( [[3] [9] [15]] )
  5. 空白をつめる ( [[3][9][15]] )
  6. 2~5を繰り返し、'['や']'が無くなったらそのときの結果を出力する ( [[3][9][15]] → [[3 9 15]] → [12] → 12)



手もつけられなかった問題が、ゴリ押しではあるが一応通せるようになって少しうれしい。

string pre(string s){   // "][" を空白に置き換え
    string b="";
    rep(i,s.sz-1){
        if(s[i]==']' && s[i+1]=='['){
            b+=' ';
            i++;
        }
        else{
            b+=s[i];
        }
    }
    b+=s[s.sz-1];
    return b;
}
 
 
string solve(int n,bool check,string s){
    n++;
    string tmp[10000]={};
 
    int count=0;
    REP(j,n,s.sz){
        if(s[j]!=']'){
            if(s[j]!=' '){
                tmp[count]+=s[j];
            }
            else{
                count++;
            }
        }
        else break;
    }
    vi a;
    rep(i,count+1){
        a.pb(stoi(tmp[i]));
    }
    sort(ALL(a));
     
    int sum=0;
    rep(i,count/2+1){
        if(check==false)
            sum+=a[i]/2+1;
        else
            sum+=a[i];
    }
    return to_string((sum));
}
 
 
string delSpace(string s){  // "] [" を "][" に置き換え
    string ret="";
    rep(i,s.sz-2){
        if(s[i]==']' && s[i+1]==' ' && s[i+2]=='['){
            ret+="][";
            i+=2;
        }
        else{
            ret+=s[i];
        }
    }
    ret+=s[s.sz-2];
    ret+=s[s.sz-1];
    return ret;
}
 
 
int main(){
    int t;
    cin>>t;
     
    rep(times,t){
        string s;
        cin>>s;
        int check=false;
        s=pre(s);
        while(1){
            if(s.find("[",0)==-1)break;
 
            string n="";
     
            rep(i,s.sz){
                if(s[i+1]>='0' && s[i+1]<='9'){
                    n+=solve(i,check,s);
                    while(s[i]!=']')i++;
                }
                else{
                    n+=s[i];
                }
            }
            s=n;
            check=true;
        }
        cout<<s<<endl;
    }
    return 0;
}

*1:A問題とB問題は一緒に出ていた先輩が解きました。

CODE FESTIVAL 参加者の参加記一覧

たくさん参加記読みたいし、需要もあるっぽいのでつくった
(togetter版はこっち CODE FESTIVAL 参加記まとめ - Togetterまとめ)

参加記収集アルゴリズム

これに引っかからなかった場合、ここにまとめられていない可能性が高いです。

  1. 「("code" "festival”) OR "codefestival" OR "コード祭" OR “こどふぇ” OR “謎コン” OR "こどふぇす" OR "コドフェ" OR "コドフェス"」の検索結果のうち、"http"を含むツイートをTwitter4Jで拾ってくる(150ツイートくらい引っかかった)
  2. それぞれツイート読んで、参加記っぽいやつを絞り込む
  3. URLに飛んでみて、非公開でないブログであればここにまとめる


参加記

記事内にコードを含むものと、含まない(参加記っぽい)もの に分けました。

Yosemite で MinecraftとかArduino IDEとかが起動できなかった

MinecraftとかArduino IDEのappファイルを起動しようとすると、以下のように「"Minecraft.app"を開くには、以前の JavaSE 6 ランタイムをインストールする必要があります。」とか言われた。適当にググったらなんとかなった。


f:id:Yazaten:20141113160627p:plain


使用した環境


やり方

ここ(Java for OS X 2014-001)に飛びます
ダウンロードします
インストールします
再起動かけます

これでMinecraftが起動するようになりました ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌