ちゃっくのメモ帳

ちゃっくがメモしときたいことをメモしとくよ

Atcoder Beginner Contest 075に参加したよ

ABC075にScalaで参加しました.
といってもScalaScalaらしく書いてないので別にそんなに書くことも無いんですけど...

C問題

各辺を取り除いてワーシャルフロイドしてみる.O(N^4)くらいで通る.
ワーシャルフロイドじゃなくてdfsとかbfsとかでもよいが計算が間に合うならWFが楽かな.

Submission #1684530 - AtCoder Beginner Contest 075

D問題

コンテスト中に間に合わなかった.
というかコンパイルが通らなくて調べてたら終わっちゃった....
ScalaだとN=50でO(N^5)はなかなか通らない...こういうあたりC++なら普通に通りそう...

Submission #1685936 - AtCoder Beginner Contest 075

感想

せっかくScalaで参加してみたんだからもうすこしScalaっぽい書き方できればいいなぁ...

ちなみにDのコードはforではなくwhileを使うと早くなるみたいな提出している人がいる!

JAG夏合宿2017に参加してきました

9/22 ~ 9/24にオリンピック記念青少年総合センターで開催されたJAGの夏合宿に参加しました

チームIQ1は全員参加できたので前日IQ1メンバーででました.

Day0まで研究室の合宿に行ってて睡眠時間が異常に減ってたので3日間とも睡魔と戦ってた...

Day1
僕はA問題を解いてあとは座ってた.Aはn文字のものは26^n個使い切れる証明がわからなかったけど出してみたら通った.
チームでは7完してるので実質お茶汲み.
この日のIQ1はなぜか全員pythonだった

Day2
吹雪ちゃんが刻印有HHKBのUS配列を持ってくる.
9時集合10時開始なのに9:56とかに到着した.
B問題をバグらせて通せなかった.重複したパターンも数えてしまっていた.(ことが翌日判明した)
この日はすごくて5時間座ってただけだった.完全にお茶汲み要員.

夜のcodefes予選Aは「予選は通れないけどレートくらいは上がるだろう」みたいな見積もりで出たら大失敗してレートを下げるはめになった

Day3
この日はIQ1の吹雪ちゃんが無刻印USキーボードを持ってきた.(夕立と睦月ちゃんはいつもJISなんだけど!!!)


記号がどこにあるかわからなくてキー全探索してたら吹雪ちゃん笑ってた

A,B,Cを解いただけ.実はB,Cでバグらせてて戦犯感がある....事実上のお茶汲み要員
全体で22位.

D問題の考察をしたがbitDPだろうという予測しかたたずだめ.
G問題は何をしても微妙な計算量になりそうで考察が明後日の方向に吹き飛ぶ.

A,B,Cはホントは3人が並列に解くのが正しいんだけど,僕がA読む→解けるな→B読む→解けるな→C読む→解けるなって感じで解けそうならときに行くみたいなスタイルをしてしまった.
どこに簡単な問題があるかわからないからこの辺どうするかチームで固めたい.





全体を通して

チームコンテスト,ほとんど無いからこういう機会にできるとめっちゃ楽しい!!!

3日間US配列を使って気がついたことはなれない配列だとライブラリを写すのさえめちゃくちゃ面倒くさく感じる.
基本的に3日間ともチームに貢献できていないのでお茶汲み係としての腕を磨くしか無い.

オリンピックセンターのご飯は割と美味しかった.サラダが取り放題で睦月ちゃんが異常量サラダ食べてた.

チーム内での役割が完全に自明問題を片付ける人になってるのでそろそろ修行しないと迷惑かけそう...



インターンに参加してきたんだよ!

8月の最終週にいい生活という会社のインターンに参加しました。期間は5日間でLINEのチャットボットを作成するというものでした。

やったこと

1日目
指定の時間に会社に来たらインターン生ぽい人が2人すでに来ていてスーツを着ててやらかしたかと思ったがあとに来た人たちが私服だったので安心した。

この日は講義をうけて作るもの班で決めるみたいな内容だった。あとは環境構築とか。

2日目
午前は実装を始めた。
お昼前に偉い人のお話を聞いてお寿司を食べた。


美味しかった。

午後も実装してたら進捗が良かったので明日くらいには終わるかなみたいな気持ちになってた。

夜はメンターの人たちと肉食べた。めっちゃおいしかった。

帰ったら劇場版艦これが届いてて嬉しかった

3日目
キーボードが合わないので持ち込んだ。
この日も実装してた。
班員とのコードの結合が大変だった。返り値のオブジェクトについて話し合いの時点で齟齬が生じてたのが原因。身体が型を求め始めた。
環境がWindowsだったのでmintty上でうまく行かなくpythonでstdin=io.TextIOWrapperとかしてたせいでログが出なくなって原因特定に時間がかかった。

4日目
実装がだいたい終わって細かいバグ潰しと追加機能を実装してた

5日目
午前は実装で午後は発表をした。その後懇親会はこれから。

感想

めっちゃ楽しかった!
1日目に講義があって安心できる。
メンターの人たちはslackで質問したらすぐ答えてもらえて心強いし定期的に進捗確認に来てくれてありがたかった!

いい生活でいい生活を送ってきた!

一番辛かったのは朝の通勤。学生時間に生きてると社会人時間は辛かった。

一応許可は貰ってるのでやばいことは書いてないはず。。。

IntelのPinでSegmentationFaultが発生した

環境

ubuntu 17.04
uname -m : x86_64
uname -r : 4.10.0-32-generic

問題

Intel Pinのサンプルを動かす際に

make all TARGET=intel64

でサンプルをビルドして

../../../pin -t obj-intel64/inscount0.so -- /bin/ls

で動作させた場合にプログラムが落ちて

A: Source/pin/injector_nonmac/auxvector.cpp: CopyAux: 291: unexpected AUX VEC type 26

NO STACK TRACE AVAILABLE
Detach Service Count: 1
Pin 3.2
Copyright (c) 2003-2016, Intel Corporation. All rights reserved.
@CHARM-VERSION: $Rev: 81201 $
C: Injector exited with signal 6
E: Wait for injector failed: No child processes
zsh: segmentation fault (core dumped)  ../../../pin -t obj-intel64/inscount0.so -- /bin/ls

と表示された.

解決法

software.intel.com

stackoverflow.com

どうやらkernelが4.10以上の場合Pinのバージョンによっては対応していないらしく
オプション -ifeelluckyを付けることで対応できるらしい

../../../pin -ifeellucky -t obj-intel64/inscount0.so -- /bin/ls

とすれば動作した

ICPC2017 国内予選

まえがき

このストーリーはrianの書いたストーリー
rian.hatenablog.jp
に出てくるIQ1の物語です.
IQ1視点のサイドストーリーという形になります

前日談

~ チーム登録 ~
icpcたいてっく予選には登録が必要である.そして僕らは待っていれば唐突にコーチが生えてきて全ての登録に必要なことをやってくれると思っていた...しかし,東工大は引き継ぎに失敗していて次のコーチが決まっていなかった...

そう、コーチがいなかったのである

去年はM2のはどろりさん,とこはるさんたちがコーチをやってくださっていた...しかし,先輩方が卒業してしまったいま,東工大M2にコーチをしてくれそうな人がいなかった...そしてこれに気がついたのが6/20だった.登録が6/29あたりまでで焦り始め,とりあえずはどろりさんに助けてーって言う.
そしたらshimomireさん,assyさんがまだ大学にいると教えて頂きtwitterで連絡が取れそうなshimomireさんにコーチをお願いして引き受けてもらう(shimomireさん突然twitterで連絡してすみませんでした.そしてコーチを引き受けて頂きありがとうございます).

~ チーム編成 ~
チーム名はIQ1。メンバーは吹雪(kuwaさん),睦月(すごぷろさん),夕立(ちゃっく)での編成になった.睦月(すごぷろさん)には去年も組んで頂いた.

チーム内の役割は吹雪ちゃんと睦月ちゃんが問題を解いて夕立はお茶を汲むって感じ

あらすじ

(先に上に書いたりあんのブログを読むことを推奨します) IQ1視点
icpcたいてっく予選は本来,大魔王yosupotにより人間軍は虐殺されてしまうはずだったがyosupotは力を溜めるための眠りについたため,今年は穏やかな時が流れる.そう信じていた...しかし後輩に次世代魔王n_ari(rickytheta)が誕生してしまった...この次世代魔王n_ariの左右には「部分文字列にGODを持つgoodbaton」「忍者の家系ninja」が控えており,人間軍は魔王に立ち向かうことを諦めた.

そして予想される残りの枠は1つ.この枠を巡ってkurukuru-sushiと人間同士の醜い争いが始まる...

国内予選開始前

とりあえずラボで必要な物の印刷を始める.夕立はIQが1しかないので何故か国内模擬用のIDとパスワードを印刷してたことに吹雪ちゃんが気がつく.ビビる.

計算機室でログインしようとしたらログインできなくなってた.理由は不明だが前回はログインできたのに今回はできなかったので,もしかして夕立が計算機室の飲食禁止のルールを回避するために片足だけ計算機室から出して水飲んでたりしたのが理由だろうか...(違うと信じたい)

  • 開始3分前 -

計算機室のPCにpython3がないことに気がつく(ワォ).
python3の使用を諦め,python2を使用することにする.

国内予選

とりあえずA問題を夕立が5分ちょいで通しBを吹雪ちゃんがとく.
Bを吹雪ちゃんが解いてる間に僕はDを読み「恐らくDP,ちがったらマッチング」みたいな適当なことを言いながらDPが得意そうな睦月ちゃんに投げる(練習で睦月ちゃんがDPに強そうな気がしてた).夕立はEを読むが全く解ける気がしない.蟻本のSATを眺めてみるがさっぱりできる気がしない.気がついたら吹雪ちゃんがB終わってた(BのFAかと思ったがもっと早い所あった).吹雪ちゃん練習のときはC++使ってたのに本番で突然pythonを使いだしてびっくりした.睦月ちゃんがCを通し終えてDを考えてる間に,吹雪ちゃんにE問題を説明する.構文解析がでたらすぐに吹雪ちゃんに投げる方針だったが構文解析の後が難しそうだった.
睦月ちゃんがD問題を通す.この時点で順位はめちゃくちゃ良くて4位とかだったと思う.
夕立はEを諦めてFを読み始め,吹雪ちゃんと睦月ちゃんにEを頑張ってもらうがEの方針が吹雪ちゃんと睦月ちゃんで衝突してた.
夕立はFをまとめてたらEが完全に沈黙してそうだったので睦月ちゃんにFを相談する.吹雪ちゃんはEをヒューリスティックに解き始める.

kurukuru_sushiと魔王軍(ninjaribaton)に抜かれてて夕立は焦り始める.

この時点で多分残り40分くらい.

睦月ちゃんが考察終了したのが多分残り10分ちょい.Eはペナルティが大きすぎて通しても意味がなさそうなので睦月ちゃんがFの実装に入る.
一度バグってダメかと思ったが残り1分弱でサンプルが合う.大急ぎで提出する.1回目の提出で「接続中」とかではじめてキレそうになるが,なんとかラスト1秒で提出成功してAC
睦月ちゃんかっこよすぎるっぽい~~~!

f:id:chakku000:20170715035759p:plain
提出時間2:59:59

懇親会

味庵に行きました.何故か僕だけ子供用に椅子に座ってました.夕立なので...

assyさん懇親会を企画してくださってありがとうございます.

感想

学内3位....やはり魔王軍は倒せなかったっぽいけどkurukuru_sushiにも勝てなかった...でも全体20位なので望みはあるらしいっぽいよ!
夕立は役に立てなかったけど睦月ちゃんと吹雪ちゃんはすごかった~

あと、チームIQ1を応援してるってツイートを見てとってもとっても嬉しかった!

ICPC国内模擬2017

ICPC国内模擬2017にチームIQ1で参加しました
メンバーはkuwaさん,すごプロさん,僕で行動指針としては最初3完してあとは適当にって感じを予定してました

開始前

誰も蟻本を持ってきていない←???
TLE本も持ってきてない←まあしょうがないか

コンテスト

開始直後問題が開けない...

とりあえず印刷してる間に僕がAを読んで通す.その間にkuwaさん,すごぷろさんはB,Cの方針を考えてAが終わり次第B,Cを通す.kuwaさんは僕がAやってる間にD問題を読んでいたっぽい?

kuwaさんがDをやるがなかなか答えが合わない.僕はEを読むが無理.Fを読む.
その間にすごぷろさんにE,Fの相談.Eは完全にすごぷろさんに投げてFは「フローじゃないかなぁ」となり蟻本を眺めたくなるが眺められない.そう誰も蟻本を持ってきていないのである.

kuwaさんがDでバグるので,コーディング交代してすごぷろさんがEの実装を始める.
なんかちょこちょこkuwaさんと交代したりしながらしてた(?).

気がついたら提出障害を乗り越えてkuwaさんがD通してた

僕はF眺めてる間に貪欲でいける気がしてきてサンプル5が貪欲で行けそうだったので完全に間違った方向へ突っ走って「考察は終わりました」とか意味不明なこと言い始める

すごぷろさんはEがバグり残り20分くらいでコーディングを交代しながら書いてったら30分延長した.
30分延長したがFの実装でもバグってサンプルが合わないがデバッグするほどの時間は残ってなかった.

終わってrickytheta氏にFの解法聞いたら貪欲じゃなかった....なんか危険なケースを聞いたけどよくわからない...

感想

Aしか通してないので僕は実質お茶汲み係をしてました

チームIQ1なので勝手に東大のIQ94ってチームを敵視してたが結果としては全く格が違って敵視してたことが恥ずかしい.94倍のIQの差では勝てない...

すごぷろさんが幾何でつらそうにしてたので実体のあるTLE本がほしい...
ライブラリほしい...

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

Codeforces #418 Div2 C An impassioned circulation of affection

コンテスト中に解けなかったやつ...

Problem - C - Codeforces

概要

文字列sが与えられる.(sの長さ\leq1500)
クエリがq個飛んでくる(q\leq200000)
各クエリはm(1\leq m \leq n)と文字cが与えられる.
文字列sの文字のうちm個をcに書き換えた場合,部分文字列でcのみからなるも文字列の最長の長さを求めよ

解法

1.各文字cに対してs[0..i]に含まれるcの個数の累積和を求める.
2.累積和を用いて各文字cに対して,「長さi」のcからなる部分文字列を作るのに書き換える必要のある文字の数を求める
3.各クエリに対して「書き換える必要のある文字の数がm以下になっている最大の長さ」を(2)で求めた結果から計算する

計算量はO(|s|q)でギリギリかな

コード

int n;
string s;
int q;
int m;
char c;

int main(){
    cin >> n >> s >> q;

    vector<vector<int>> cnt(26);
    for(char c='a';c<='z';c++){
        int i = c-'a';
        cnt[i] = vector<int>(n+10,0);
        for(int j=0;j<n;j++){
            if(s[j]==c) cnt[i][j+1] = cnt[i][j]+1;
            else cnt[i][j+1] = cnt[i][j];
        }
    }

    vector<vector<int>> need(26,vector<int>(n+10,0));
    for(char c='a';c<='z';c++){ //26
        for(int i=1;i<=n;i++){  //1500
            int mn = 0;
            for(int j=0;j<n;j++){
                int s = j;
                int t = s + i;
                if(t>n) break;
                // s[s..t)
                int num = cnt[c-'a'][t] - cnt[c-'a'][s];
                mn = max(mn,num);
            }
            need[c-'a'][i] = i-mn;
        }
    }

    rep(loop,q){
        cin >> m >> c;
        int ans = 0;
        for(int i=0;i<=n;i++){
            if(need[c-'a'][i] <= m) ans = i;
        }
        cout << ans << endl;
    }
}

感想

qの値が微妙だから計算量から方法思いつきにくい気がしたけど前計算が必要なことは分かりそうなのでこのくらいは解きたかった...

あと問題文に化物語が使われてるけど西尾維新の作品て外国人が読んでも楽しいのかな...?同音異義語で遊ぶような作品だから言語が変わるとその面白さはなくなりそうだよね.