あったこといろいろ

ほぼ自分用備忘録です。

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が起動するようになりました ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

CODE FESTIVAL 参加記

CODE FESTIVALに参加しました 超楽しかったので色々書きます
(色々なことがありすぎたので、少し長めです。)

こどふぇす0日目

前泊が許されたので朝9時頃に出発した。新幹線の領収書を貰いそびれたりなんやしながら上野駅へ。
ひとまずホテルに荷物を預けて、お昼ごはんに黒いカレー(キッチン南海 本店 | カレーデータベース)を食べた。午後3時なのに人が数人並んでいて驚く
秋葉原でぶらぶらした後、Twitter経由で集まった@LazyMiiさんと@diginatuさんとつけ麺を食べ、その後2,3時間「vimは是非使うべし」とか「TopCoderがほげほげ」とかいう話をした(とっても楽しかったです ありがとうございます!)

ホテルについた頃には眠かったのですぐ寝た

こどふぇす1日目

会津の人たちに金魚のフンしながら会場に到着
Tシャツをもらったりコンテンツをチラ見しながら「金ぽよだー」とか思う
コンテスト始まるまでは、だらだらとTwitterを見てた。@konjo_pさんが近くだったのでこんにちわした。

コンテストのABCDはやるだけ、Eはdpがんばるだけ・・・だったのに、CDEが解けなかった。以下言い訳
Cは謎の実装が重い嘘方針で1時間かけて書く→いくつかWAが生える→方針を変える→焦りでバグバグする→ループの範囲ミスに気づかないまま死
Dはいわゆる誤読、「入力した数が出現する初めの段を出力する」とかいう制約を勝手に作って死、おしまい。
方針ミスとかに気付いて焦ると当社比0.5倍未満の強さになるらしい、強く生きよう。

この時点で半泣きだったけど、せっかくのお祭りなので ちょくだいさんのアルゴリズム擬人化、にくならずLT、not幾何プロLTを見に行った。
ビームサーチはコスプレ少女、目の下はツラミ、幾何は回すだけ などを覚えた(?)

そして最後に、1日目で実は一番盛り上がったイベント 本戦上位5名が出場するエキシビジョンマッチがあった。
自分は見るだけのイベントなのにものすごく盛り上がり、超難問の1つを10分でACするという圧倒的な強さ、深い考察をものの数分で紙にまとめられる思考力の高さ、問題を見て使用するアルゴリズムを決定するまでの驚異的な速さを目の当たりにすることができたことにずっと感動してた。
どれも僕からみると超人的で、見てるだけなのにものすごく感動した。やっぱり競技プログラミングが強い人は格好良いなぁ

この日も帰ったら眠かったのですぐ寝た

こどふぇす2日目

起床フェイズをクリアし、9時からのあさプロEASY*1に無事参加できた
やるだけのABを解き、Cを見ると最短経路系だけどワーシャルフロイドでは間に合わなさそう。蟻本をみながら両側からダイクストラして無事遅めの3完。
EASY 11位 /50人 だったので銀缶バッチをもらえた。ちょっとだけ嬉しい

ちょくだいさんのトーク、秋葉さんのトーク、いもすさんのトークを聞く。あの秋葉さんに会えた上に蟻本にサインをもらった!神!

次にリレー形式のプロコンをやった。僕はほとんど活躍できなかったけど、くりんぺさんやJAPLJさんとチームが組めて楽しかった(小並感

そんなこんなでいつのまにやら閉会式。つねならずさんとトイレ5個さんが泣いてて、なんだかしんみり。。。
200人とスタッフの方全員で写真撮影してついに解散


最後に@diginatuさんと東京駅でカレーを食べ、別れを惜しみながら帰ってきた。こどふぇす終わっちゃうの寂しいよぉ


まとめ

  • 問題はよく読む。誤読超つらい
  • 最低限のアルゴリズムくらいはちゃんと使えるようにして、競プロつよくなる
  • ぼっち参加だったけど沢山の人とお話できて楽しかった
  • CODE FESTIVAL神イベントだった。またあれば何度でも来たい




*1:本戦の順位によって出る難易度が変わる。僕はEASYだった。