読者です 読者をやめる 読者になる 読者になる

ゆらのふなびと

競プロ, Python, C++

RUPC2016に参加しました

立命館大学競技プログラミング合宿(RUPC)2016に参加したので、参加記を書くアレします。

参加した理由

直接のきっかけは、@DarseinさんがRUPCのツイートをRTしていたのを見たことです。オンサイト楽しそうというのはDDPC等への参加者を見ていてずっと思っていましたし、自分の周りには競プロをやる人が全然いなかったので同志たちと会って話してみたかったという気持ちもあります。それでDarseinさんに「初心者でも大丈夫ですか?」と聞いてみたところ「大丈夫ですよー」「初心者の方も多いですよー」というような返答をいただいたので参加することにしました。

RUPCについて

そもそもRUPCって何?という方は↓のリンクが参考になるかと思います。

atnd.org

ざっくり言うと、RUPCは立命館大学で行われる競技プログラミングの合宿です。2016年は3日間に渡って行われ、立命館大学会津大学北海道大学による問題のセットがそれぞれの日で出題されました。

RUPCのルールはICPC(大学生向けの競技プログラミングの世界大会)のルールにのっとっています。基本的には、3人1組のチーム戦です。1度にコーディングできるのは1人だけ。1人がコーディングしている間、他の人は問題を読んだり考察を進めたりします。

AOJでオンラインから参加することもできるので、滋賀のキャンパスまでは行けない><という方はぜひそちらも検討されたし。

ちなみに、合宿と言ってもみんなで同じところに泊まるわけではなく、ホテルはめいめいに取ります。多くの人はサイトでお勧めされていた「アーバンホテル南草津」に宿泊していたみたいです。駅の目の前にあって結構便利だと思います。自分は大学の都合で奈良に家があったので、そこから会場まで通うことにしました。

1日目: 立命館大学セット

1日目は以前からTwitterで親交のあった@tookunnと合流して、駅前でラーメンを食べてから会場に向かいました。他にも駅前ならいくつかお食事処があります。

チームはとりあえず@tookunnとは組もうということになっていて、もう1人を探していたらなんとあの@kenkooooさんにお声をおかけいただきチームが完成。チーム名は僕が「『○○さんチーム』にしますか?」と言ったらその場のノリで「yurahuna_san_team」になってしまった。

僕はまずBを担当することに。とりあえず左から1を埋めていけばよさそうと思ったけど、サンプルが不親切なので注意が必要。開始13分でチーム初AC。ACすると対応する色の風船をジャッジの人が持ってきて、チームの机のふちに貼ってくれた。これは嬉しい。

記念にこの問題だけコードを載せておきます。

N = int(input())
X = input()
D = int(input())
 
ans = list(X)
done = [False] * N
for i in range(N):
    if D == 0:
        break
    if ans[i] == "0":
        ans[i] = "1"
        done[i] = True
        D -= 1
 
for i in range(N)[::-1]:
    if D == 0:
        break
    if ans[i] == "1" and not done[i]:
        ans[i] = "0"
        D -= 1
 
print("".join(ans))

Cはkenkoooさんに任せてAをtookunnと一緒に考える。これAの方が難しくない?などど思いながらモーメントの考えを話し、実装はtookunnに任せて2AC目をゲット☆彡

その後Dを僕が「貪欲で解けるんじゃね?」と言ってsubmitしたらWA。あとはCとEをkenkooooさんがいつの間にか通していた。DはDPかなーと3人で考えるも結局わからずそのまま1時間が過ぎて終わった。

結果:4完 / 7問 で 25位。

解説を聞きながら、D問題通したかったなーという感想をみんなで言い合っていました。あとA問題シンメトリーに置くやつ頭いい。

終了後は懇親会1日目へ。学外のおしゃれなイタリアン。立命の@tubo28さんとかと同じテーブルだったので「ジャッジってどんなことしてるんですか?」とか聞いていた。問題は2ヶ月前くらいから作り始めて、当日はClar(質問)の対応、風船のお届けがメインらしい。

2日目: 会津大学セット

多い。とにかく問題数も参加者も時間も。5時間コンテストってこれ体力持つかな…11:00~16:00だけどお昼どうするかな……などの不安を抱えながら会場に向かう。(お昼については、事前に聞いた限りでは途中で食堂に食べに行ったり、お菓子で済ませたりということでした)

本日はAを担当。すぐできそう!と思い最初に解かせてもらうもサンプルが合わず一時撤退。ctylさんに助けを求めると「端は2で割っちゃアカン」ということが判明。そこを直してAC。A問題に20分もかかってしまって焦った……。

Dは場合分けが多かったのでみんなで相談。実装はcormoranさんがやっていたけどすごく重そうだった。 Eはやばそうだったので後回し。Fはctylさんが解法を5分くらいで思いついてさっと通していてかっこよかった。Gはctylさんに解法を教えてもらい僕が実装。1人じゃ解けなかったのと思うので、助けを借りてでもACできたのがとても嬉しかったです。

DをデバッグしたりEを考察したりしていたら終わった。結局お昼のことなど考えず5時間ぶっつづけでやってしまった。

ちなみにこの日はCodeforcesSRMもあって、きゅうりさんなんかは終了即撤退してCFに出ていたらしくプロだった。

自分は懇親会2日目に参加。今日は生協の「学生向け!」的なメニューで立食パーティーでした。チーム戦ではお話しできなかった人たちと話せて楽しかったです。

3日目: 北大セット

朝が早かったので現地でパンを買って食べた。@kurome____さんに声をかけてもらいチームを組むことに。あと1人ほしいなーと思っていたら、@kyuridenamidaさんが遅れるから誰かチーム組んで!とツイートしていたのを思い出し恐れ多くもお誘いすることに。

自分はBを担当することになったのですが、「周期数列」というタイトルといい制約(10万)といいやばそう、と怖気図いてきゅうりさんに投げた(実際そんなでもなかった……)。代わりにCを読むものの問題文が難解で苦戦。一度間違ったClarを投げてしまった。どうやらシミュレーションで解けるらしいということがわかり、きゅうりさんの幾何ライブラリを借りてなんとかAC。実装結構しんどかったけど、やっぱり苦戦した問題にACできるとテンションがアガります!こういうときにみんなで盛り上がれるのもチーム戦のいいところ。

D~Fはほとんどきゅうりさんにお任せになってしまった。自分とkuromeさんはGを相談していてDPの方針で考えていたけど、解説を聞くと行列を使ってどうたらということで、3ヶ月後に解けるようになってればいいかな…という感じでした。

この日は懇親会はありませんでしたが、自分はctylさん、kuromeさん、tookunnと駅前でお昼を食べて帰りました。

まとめ

とにかく楽しかったです。3日間競プロの問題を解きまくれたこともそうだし、チームでわいわい相談しながらできたこと、難しい問題をチームメイトの助けを借りてACできたこと、逆にチームメイトを自分が助けられたこと、多くの競プロ仲間に出会えたこと……合宿ならではの楽しいことがたくさんありました。やっぱり競プロ楽しいなと思ったし、いつかオンサイトの大会に出てやるぞ!というモチベーションも高まりました。

本当に素敵なイベントだったので、来年もぜひ参加したいです。秋には会津大で同様のイベントがあるそうなので、そっちにも行けるといいな。