JAG夏合宿2019 運営参加記

9/14~16で開かれたJAG合宿に運営として参加しました.

夏合宿は2017には選手として参加,2018はお手伝いとして宿泊せずにちょっとだけ顔を出した感じ.

スタッフの役割分担として,告知や選手とのやりとりと食券・懇親会の手配を担当することに.

あと作問にも結構かかわることができたかな.

まずは作問以外の仕事を書きます.

告知とか参加者とのメールのやりとりとか

wikiに載せる告知とか申込フォームは毎年同じような文章なので流用すればOK.

なのでやる仕事といえばイレギュラー参加の方にメールで状況を聞いたり,参加費支払催促メールを送ったりするくらいかな.

あとは参加者全体へメールを送ってしおりを送るなど(失敗したけど).

これらのタスクは大して大変ではないです.

食券・懇親会の手配

2017と2018は夏合宿で懇親会が無かったので僕は知らなかったんですが,昔は結構やっていたっぽい.

懇親会を開く会場を押さえるのと,パーティー準備をオリセン内施設にお願いするのの2点を突破して初めて懇親会ができるようです.

例年は基本的にカフェテリアふじを運営してるところにお願いしてパーティを準備をしてもらっているらしい.

ですが今年は運悪く断られてしまったので慌ててほかのところにお願いする必要が出てきてしまったのでちょっと大変でした.

結局無事代替のところが見つかってあの懇親会ができたというわけです. 懇親会ができると確定したのが1週間前で,予算の見積もりが出たのが3日前くらいだったため参加者の皆さんに懇親会費を伝えるのが遅くなってしまってすみませんでした.

裏話としては,もともとAGCと被っていたため時間帯を変えたりとかアルコール提供量を減らしたりとかしてパーティ準備をお願いしたのにAGCが消えたうえに(過去の懇親会はアルコールありだった(今年の様子をみてアルコール無しのほうがいいと確信した)) そのパーティ準備を断られてしまったことがあります.

コンテスト準備について

atcoder橙になったらatcoderで作問挑戦してみようかなとか思ったんですが,会社で働きながらほかのところからお金をもらうと税金の処理とかが絶望的に面倒になるという問題があるので,atcoderに応募するのはやめました.

JAGならそういう問題が無いのでJAGにいくつかの問題を投げています.

夏合宿のコンテストについて

CGHIの原案とCEGHIのケース作成とBDの問題文作成をした.

英語で問題文かくのは慣れないとかなりしんどくてかなり難儀したのですが JAGにはI社やP社やG社などで英語を使いこなす猛者がたくさんいるのでいい感じに修正してくれるので大丈夫です(?).

自分の作った問題の難易度判定は本当に不可能で,たとえばHは方針を選べばセグ木1本でできるか難易度「普通」でいいなとか自分では思っていたりした.ごめんなさい.確かにこの実装力重視セットの中であんなのが出されたら作問者恨むわ.

JAGセットが実装力とライブラリ力を問うセットで,いわゆるボス問がないというのは準備の時点でこっちも理解していました.

f:id:smiken:20190917152237p:plain
問題準備中のJAGスラックでの一幕

f:id:smiken:20190917152326p:plain
残念

合宿について

2年ぶりに宿泊付きで参加できてとても楽しかったです.

最近はコンテストに出ることも減ってきて年齢層の移ろいを感じることも多いですが,まだ知っている人も多いのも良かったです.

3日間壇上でいろんなチームを眺めるのも面白かった(マジでチームによって雰囲気とかが全然違う).

何度か部屋でアナウンスとかしたんですが,自分が人前で話すことを想定したつくりになっていないので大変でした.慣れないとね.

JAGとICPCについて

僕自身は1度だけ国内予選通過してそこでとても楽しい思いをさせてもらったという意味でICPCに感謝をしており(その結果当時のスポンサー企業に入社したりしたんですが)その恩返し的な感じでJAGに入りました.

JAG運営の人手が減っていて,それに伴ってJAG主催イベントの縮小が進んでいる(模擬地区とか)のは事実なので,こういうイベントを存続させるためにもJAGに入ってくれるといいなと思います.

最後に

参加者の皆さん参加してくれたありがとうございました.3日目の最後にも言ったけどぜひ参加記を書いてください.

そしてJAGの皆さん(特にnotさん)運営ありがとうございました.どれくらい力になれたかわかりませんが,来年も(合宿があれば)運営側として参加したいです.

最後の最後に

jag-icpc.org

大学生活と就活の振り返りポエム

この3月付で修士号をもらって6年間の学生生活が終わる(はず)なので,学部から振り返ります.あと就活のこと.

大学入学前の春休み

理系っぽい何かをしようと思って競プロを始めようとする.(入門1度目)

AOJの入門を先頭からやっていくことにしたけど,1行に複数の数値を出力する方法が分からず挫折しました.

大学1年

折角大学に入ったんだし,高校の頃は数学が好きだったし理学部に進学してみたいという思いを抱く(謎)

でもどの学科もあまり興味が持てず,自分が好きなのは数学ではなくただの計算だったということを確信する.

ペンシルパズル同好会に入って競技パズルとういう概念に出会う.

大学2年

競プロを扱う講義を履修する.(入門2度目) C++の配列の宣言やif,forの使い方を知る.そしてすぐ飽きる

結局進学先は工学部の計数にすることに決心.数値解析とか面白そうだし.

大学3年

本郷に移り講義が105分になり1限が8時半開始になり生活が破綻し始めます.

色々あって競プロを始めることを決心(入門3度目)

ABCを片っ端から埋め始める.無理やりコドフォにもでちゃったりするように.

オンサイト(DDPC2016)に出たりしたのもあってモチベが上がりまくる.

大学4年

就職とか無理~~なので院進決定しました.

数値解析系の研究室に行こうとずっと思っていたけど, アルゴリズム・データ構造の教授を志望することに締め切りの1週間前くらいに思い切って変更(大正解).

院試に受かったのはいいものの,卒論配属されて半年で卒論を形にしなくちゃいけなくてだんだん苦しくなる. その結果メンタル由来っぽい何かで体調を崩しがちになる.人生初胃カメラはここです.

ちなみにICPC国内に初めて出て15位で予選落ち

修士1年前半

修士に入ったからには研究しまくらねば...という気持ちだけが高まってとりあえず競プロをやめることに. 研究もうまく進まなくて困って毎日焦りが増すばかりで色々悪化してた.

流れでICPC国内には去年と同じチームに出ることになっていて, チームメンバー全員の競プロモチベが低かったから記念参加だな~~とか言ってたら奇跡的に4位になって予選通過しちゃう. 自分はこれがきっかけで競プロモチベが一気に復活.JAG夏合宿にも参加して競プロ知り合いが増える. このとき予選落ちしてたらそのまま競プロ辞めてたかも.

修士1年後半

ICPCつくばや19卒向けの企業コンテストに出てenjoyしました.

研究のほうもとりあえず学会論文を1本書けて精神的にもおちつく.

そろそろ就活にむけて準備する必要があったんだけど,就活する気が全く起きなくて無をしていた. 年明けあたりから専攻の同期たちが内定を得たみたいな話をするのをできるだけ聞かないようにして過ごす. そもそも研究系に進むかエンジニア系に進むかすら決めてないし絶対就活無理では???

就活話

さすがに何もしないのは不味いからM1の3月くらいに動き出す. 研究系にするかエンジニア系にするか決心がつかないので両方受けることにしました.

ここで大きな問題が.ESを提出するためにはESを書く必要があるわけで.

研究内容とか志望動機とかを書く分には別に問題ないんだけど,自分の長所を書けとか言われると書くことがないから困っちゃう. そのせいでESが書けなくて数週間悩んだうえで,飲酒して勢いで書くことにした(僕は酒が苦手です).

ES1つ当たりの負担が大きすぎるから3月は3通でおしまい.本当はあと4社くらいだすつもりだったんだけど...

(社名は陽に書きませんがわかると思います)

A社のケース

数理計画とかをやっている会社です.業務内容が楽しそうなので受けた. 筆記試験があったりレポート課題があったりで大変だった.

面接にはキチンとスーツを着て臨んだりして,いかにも就活!!って感じだ. 技術面接(?)ではアルゴリズムの話とかを結構楽しくできていい感じだと思ったんだけど,一番最後の社長面接で落ちました.

不採用理由は教えてもらえなかったからわかんないけど,面接で思ってることを正直に話しすぎたからな気がしてます

B社のケース

退職エントリで話題になった研究所.M1夏にインターンにも行った. よくわかんないウェブテストがたくさんあってよくわかんないな~~っていう印象.

面接(名前は面接ではない)は自分の研究内容のプレゼン5分とその質疑20分くらいという硬派な感じだった. ESを出すとメンターのような方がついてくれて,プレゼン用のスライドを添削してもらったりわざわざ本番と同じ環境でリハーサルをしてくれたりして頂きました.

面接本番ではいい感じに発表できて質疑でもきちんと返答できて一安心.やりとり終了後に司会者(?)の方に連れられて部屋を出て,その場で不採用(マッチング不成立)を告げられた.草.

一応理由も教えてもらえて,「あなたの興味にそえる業務に割り当てられる保証がないため」とのこと. 結果自体に不満はないけど,最初から不採用って決まってるんだったらわざわざ面接に呼ばないで欲しかったなぁ(スーツを着るのは面倒なので)


こんな感じで4月中旬時点で2社に落ちもう1社ESを出した会社は進行が遅いようで進展はない. さすがにアレなのでAtCoder Jobsとかも使いながらESを書く作業を再開しました.

色々厳しいから追加で出した数社も全部落ちたら留年することに決めて,休学のシステムとかを色々調べていた.

こんなタイミングで某社(以降C社)からオンサイト参加のお礼と一緒に「キャリア面談みたいなのしませんか??」という感じの文面のメールが届く. C社は世間的にも(競プロ的にも)有名な人材斡旋(?)会社なので,きっと就活の相談やアドバイスをもらえるかもと思ってお話しすることにしました.

C社のケース

いざ行ってみると自分のパーソナリティっぽいものや就活の状況とかを色々聞かれた.正直に答えていくと徐にC社の会社説明が始まって労働環境などのプレゼンを受けることに.

このとき初めて察する「これって事実上C社の選考なのでは?」

そうだと分かってたらもっと質問とか準備してたんだけどなぁとか思いながら色々と的外れな質問をした気がする.

正直なところこのC社は興味はあったもののレベルが高すぎるから敬遠してた企業なので,ダメもとで選考を受けてみることにする.

早速プログラミング課題が出て人生で初めてJSを書くことになる(結構大変). また面談があって課題や性格診断のフィードバックで真っ当な指摘を受け,なんやかんやでESを提出するように言われる. 頑張ってESを一通り完成させて提出したあと音沙汰は一切ありませんでした...

D社のケース

3月中にESを出してた残りの1社.AtCoderで企業コンを数回やってるとこ.

ウェブテストとかコードテストは無難にこなし,4月中旬にエンジニアの方と話す機会(選考ではない)を用意していただいた.

ゴールデンウィーク明けに面接を設えてもらいエンジニア2人と人事1人に対して8分くらいのプレゼンをした. 自分の研究内容8割と競プロ2割くらいの配分のスライドを事前に準備. 研究内容の説明はさすがに慣れてきた気がします.

競プロのスライドではICPCの参加実績(この企業はつくば2017の協賛企業だった)やAtCoderCodeforcesのレートを書いてみた. あと,念のため(一般的な)プログラミングの知識や経験が皆無であることを強調しておいた.

面接官の方からいろいろな質問を受けたんだけど,技術的な話は知らないことも多くて何度も「存じ上げません」って返した覚えがある.それでも嫌な顔せずほかの話を振ってくれたりしたので何とか乗り切れた(?).

意外にも翌日に通過通知のメールが来て人事の方と面談(選考ではない)に進むことに.会社説明のビデオもついてたからそれを見て気になるところを洗い出してメモにまとめておいた. 面談(5月下旬)はかなり軽い感じで履歴書の確認とかをしたあと突然内定を言い渡された(マジ?).迷う余地はないのでその場で受諾した. 最後に人事の方から「入社してもぜひ競プロを続けてください」と言われたのも良さがあった.

この面談の直後から学会発表で中国に行くことになってたので浮かれる余裕が皆無だった(原稿を丸暗記する必要があるため).出国間際に選考の辞退メールを慌てて書くことになったのもあんま良くなかった.

こうして7社にESを出して1社も内定辞退をすることなく5月下旬に就活が終わりました.感想としては一般的なエンジニア就活はもっと早くするべきです.

修士2年(就活後)

某社のオースティン見学ツアーの募集があったから旅行に行きたさから英語でのホワイトボードコーディングテストを受けた.落ちました.

就活も終わって心に余裕ができてIOIボランティアに行ったりする. これは自分にとってかなりインパクトのある体験で,コンテストの裏のインフラとかが(何がどうなってるかわからんけど)衝撃的だった.

その後なんやかんやでAtCoderが橙になったりCodeforcesで赤タッチしたりと努力が実を結んだっぽい.内定先の企業のオンサイトにも行けたし. 社会人になったら精進する時間が取れないというのを各方面から耳にするから,これがキャリアハイになる確率がかなり高そうだけど,そうなったとしてもいいと思えるところまで来たので満足です.(今のところ競プロ辞める気はないけど)

以上が振り返りです.大学の話とか言いながらほとんど競プロの話になってませんか?


ついでに就活の時に困った?悩んだ?迷った?ことを書いておきます.反面教師にしてください.

資格欄

調べてみても「業種に関係ない奴は書く必要ない」とか「話のネタになるから書いとけ」とかいろんな意見がありますね. 甲種危険物取扱者を持ってるんですが結局書きませんでした(取ったのが10年前だから突っ込まれてもあやふやにしか答えられない).

暗算十段はESに1社だけ書いてみたけど特に触れられなかった.こっちは「挫折->努力->勝利」みたいな背景があるからもっと押してもよかったのかも.

コードテスト

どこまで行儀よく書けばよかったんだろう.さすがに1文字変数は使わなかったけど,数十分の時間制限付きのテストでわざわざコメントをつける必要まであったのかな.

上に書いていない某企業ではjsonを読み込んでクエリに答える課題が出たんだけど,JSは何も知らないからC++構文解析を書いて乗り切りました.やっててよかったAOJICPC埋め.これがどう評価されたのかは知りません.

エンジニアとしての経験や知識

会社によっては「〇〇(例えばDBやインフラ)の経験はありますか?」みたいな質問に答える必要があります.

そういう経験がない自分は,全部の「いいえ」に〇をつけるみたいなことが何度もありました.悲しいね. やっぱ技術系のインターンに行ったことがあるといいんだろうなぁ

服装

私服で来てくださいと書いてあったので私服で行ったら8割くらいの人がスーツだったという奴が何度もありました.何故.

自分は面接のときは念のためジーンズじゃない長ズボン(なんて言うのアレ)を履きました.上は,他社の競プロTシャツを着るのもなんかアレだからポロシャツの上に襟付きのシャツを羽織るスタイルで誤魔化したんだけど,親曰く変だからやめたほうがいいらしい.

性格診断

就活してると性格占いみたいな5択クイズを100問くらいやらされることが何回かありました. この歪んだ性格を少しでも隠したほうが有利な気はしたんだけど,全部正直に答えました.

「数字に強いこだわりがある」とか選ぶのあんま良くない気がするんだけど「とても当てはまる」を選んだ(実際そうなので)

C社の面談の時に性格診断の結果として「協調性と自己肯定感がかなり低い」みたいな評価が出ていると教えてもらった.おっしゃる通りです.

面接での競プロアピール

そもそも競プロは何なのかっていうのを説明することになるからちゃんと準備しておけばよかった(何回かこれでグダった)

実績を伝えるのは難しいけどICPCのの話はネタにしやすかった.「大学対抗」とか「チーム戦」とかいう要素があるから話を膨らませやすいっぽいですね.


いかがでしたか?残念ながら就活のことは最後までよくわかりませんでした.どうやら,やりたいことが定まってないまま就活をすると苦労するようですね!

RUPC2018不参加記

RUPC2018に不参加したので問題の感想を書こうと思います.

不参加に至った経緯

btkプロとかに参加するように勧められてわりかし行く気でいたんだけど,就活を全く進めていないので断念.
3月下旬というのは就活が忙しくなる時期だそうです.

Day 1

本当は問題を見るだけにするつもりだったのに...

A

単純に二重ループ回すだけだけど,よく見ると出力が index じゃない罠

B

3日間で1番問題文が難しいと思った問題. g(i)じゃなくて g(a_i)を出力するんだ...

C

mapとかmultisetとかで持ってもいけるんだろうけど,同じかどうかの判定の時間がわからない.
素直に前から見た時と後ろから見たときの差分を持ちながら合致してない種類を数える.

AOJの仕様上(?)余計な空白があると受け入れられないらしくめっちゃWA数を稼げた

D

貪欲でできるのかな~~と思うけど無理っぽいから区間DPかな~~と考えて無理っぽいからよくみるとただのDP. O(n^3).

E

問題文を素直に読むと(いたずらされる前は)有向グラフの問題だし有向グラフでの最短路を求めるもんだろうと思う
そう思うと「 a_iから b_i」とかも有向辺を意味するように解釈できちゃうんだなぁ.有向でも解けるんですかこれ?
無向だと思うことにしてもなんか難しくてよくわからない割にみんな通してるから,とりあえず全部辺貼ってダイクストラしたら通った.
解説読んだらそれはそうという気持ち.

F

桁DPにするか包除でやるか悩んで思考停止桁DPへ.
最初[515]の状態を区別しなきゃいけないことに気づかずサンプルが合わなかったけど,ちゃんとオートマトン書いたら解決.最初から書けばよかった.

G

 i階と i+1階がつながったときに頂点 iと頂点 i+1をつなげるみたいなUFを書きたくなる.
何日目で i階と i+1階がつながるかを調べるためには愚直じゃだめで,setのupper_boundとかでいけるっぽい.
でも面倒なので区間更新・点取得のセグ木を貼る.
(日数 iを後ろから見て区間 [s,t) E_iに更新すれば最後に残った数値が初めてつながった日.)
座圧とかいろいろあって若干面倒だけど一発で通ってラッキー

Day 2

就活の事情で1時間半経過したところから参加

A

ちゃんと問題文を読んだので引っかかりません

B

最上位bitの位置を出力したくなるけど Nに1を足しておくと楽

C

貪欲アンド貪欲みたいな感じ

D

問題文からして難しそうですが.結局 |S|分木みたいな感じになるから答えはせいぜい \log_2 |S|で小さい.
答えを決め打ちしてチェックすればOK.運が悪いと比較対象の文字列がめっちゃ長くなるっぽくてMLEする(した).

E

これ難しすぎでしょ.最初 O(1)でできるんじゃね?とか思ってたけど自明な例を考えると自明に不可能だった.
結局コンテスト中には解けず,あとで考えたら(街頭のID&そこに使うコスト)をキーにダイクストラやんけ.

F

長さ3の順列は6通りだし,最大6個つなげれば絶対可能.「 i個めをつなげたときの順列」の順列を考えて O(6!)で解ける.

G

消せる条件のお気持ちが全くわからんけど,とりあえずグラフを書いてみる.一般マッチングができればこの問題の性質とか無視して解けるなぁと思ったから一般マッチングのソースを貼ると通る.(まだ解説読んでないしもうちょい考えたい)

H

そこから右に何個0が連続してるかをあらかじめ数えておく.するとimos法とかで(先頭0を除いたあとの) i桁の数がいくつあるかを求められる→桁数確定.
あとはその桁数の数を全部vectorに突っ込んでソートすればいいやとか思ったけどもしかしたらTLヤバそうなのでSAを使う.
バグらずかけて最高

I

 n=14だしどうせ O(3^n)でしょ.とりあえず O(2^n n^4)かけてすべての部分集合に対して最小包含円を求めておいていつもの部分集合DP.
途中で偉くバグってしまい厳しくなったわけですが,その原因はベクトル v,wが平行な条件を v \times w < EPS にしていたせいでした.しょうもない.

J

コンテスト中には区間更新じゃなくて点更新だと勘違いして書き始めたわけですが,途中で気づいて撤退.遅延セグ木にうまく個数情報乗せられなかったからあきらめて平方分割でやる.平方分割意外と早くて余裕で通るし重宝しそう.

残り

まだ解けない

Day 3

起床即参加

A

A問題から難しい.初めて矛盾するクエリ番号を答えるものとばかり.

B

どう考えても難しすぎる.1個も選ばないときの値を0だと思い込んでいたせいでWAが取れず1時間費やしてしまった.悲しい(一人参加だとこういうので心が折れがち)

C

わざわざ'o'マスが用意されるくらいなんだから適当にやっても大丈夫なんだろうと思ったけどなんかWA.
これ近傍マスと(関係ない)枝が隣接する場合を考えていなかった.

D

変なDPっぽい問題.寝起きすぐに一番最初に解いた問題だったからか異様にバグった.24分6WAってなんや

E

どうみてもオイラーツアーだなぁという感じ.この問題を残して残り10分だったから手つかず.考察としてはGとWを1と-1で表すといいとして,区間に一様に-1を掛ける操作を区間総和さえできれば十分.セグ木に書くのは嫌だったから結局こっちも平方分割でごまかした.

F

ICPCつくば以来(個人的に)よく見る最短路DAGの問題.どの枝集合を伸ばそうかと絵をかいて眺めていると最小カットになることに気づくから,最大フローを貼る.綺麗.

G

エイホコラシックを持ち合わせておらず終了.しょうがないからSAを貼って二分探索して対応する区間を全列挙.
最悪ケースだと区間の個数がめっちゃ多くなってしまいMLEしてしまう.時間もないし適当にヤバそうなケースだけ別の方法で対応するようにしたら通っちゃった(?)

まとめ

まだ解説読んでないからちゃんと確認しよう
チーム組まずに一人でやると苦手な問題も解かざるを得ないからある意味練習になる
セグ木抽象化しようかしら
就活が想像以上につまらない