mayoko’s diary

プロコンとかいろいろ。

AtCoder

CODE FESTIVAL 2015 決勝 D - 足ゲームII

CODE FESTIVAL 2015 決勝 に参加しました。5 完最下位です。ABCDE で辛い思いをしていたら終わってしまって, あまりおもしろいところに食い込めなかったのが残念です。 問題 code-festival-2015-final-open.contest.atcoder.jp 解法 本番は脳筋遅延評価セグ…

AtCoder Beginner Contest 014 D - 閉路

問題 abc014.contest.atcoder.jp 解法 lca 使ってやるだけ。木構造では2つの頂点の距離が一意に決まるのが本質的? class Tree { public: Tree(int V, int root) : V(V), root(root) { T.resize(V); for (int i = 0; i < MAXLOGV; i++) parent[i].resize(V);…

京都大学プログラミングコンテスト2015 G - ケンドー

問題 kupc2015.contest.atcoder.jp 解法 配列 B の後ろから順に対応する A の数字を決めていきます。今, B[i] に対応する A[j] を決定したいとすると, j は, まだ配列 B の要素とまだ対応していない j の中で, 一番右側にあるものを選べば良いです。これを高…

京都大学プログラミングコンテスト2015 F - 逆ポーランド記法

問題 kupc2015.contest.atcoder.jp 解法 計算の構文木を作って, その構文木を幅優先探索して得られる文字順を反転させると答えになります。例えば以下のような感じですね。 デバッグ用に計算結果も出力してくれます↓ int calcs(string s) { stack<int> X; int n =</int>…

CODE FESTIVAL 2015 予選B D - マスと駒と色塗り/Squares, Pieces and Coloring

こどふぇす予選問題全完出来ないのはまずそう。 問題 code-festival-2015-qualb.contest.atcoder.jp 解法 kmjp さんのコードを参考にして書きました。 解説に書いてあった通り, set で黒マスの区間を管理しながら答えを求めていけば良いです。S からスタート…

京都大学プログラミングコンテスト2015 H - Bit Count

これは解けるべきだったんや… 問題 kupc2015.contest.atcoder.jp 解法 桁 DP するだけです。dp[n][diff][carry] = (n 桁目までの時点で X+N と X のビットカウントの差が diff で X+N のキャリーが carry となるような X の最小値)としてがんばります。 cons…

京都大学プログラミングコンテスト2015 E - マッサージチェア2015

嘘解法っぽいけど通ってしまった。正当性あるんですかね。 問題 kupc2015.contest.atcoder.jp 解法 H > W と仮定します。とりあえず, 三角形の一つの頂点は長方形の頂点と一致し, 残りの頂点は長方形の辺と重なるようにあるはずです。 ということで, 以下の…

京都大学プログラミングコンテスト2015 D - 高橋君の旅行

KUPC2015 に参加しました。 ABCDE 解いて 60 位くらいでした。うーん。 問題 kupc2015.contest.atcoder.jp 解法 方針としては, 最後に滞在する街で場合分けしてそれぞれの場合に得られるお金の最大値を求める, という感じで解きます。そのためには, 街 i に…

AtCoder Beginner Contest 030 D - へんてこ辞書

問題 abc030.contest.atcoder.jp 解法 python 多倍長最高で通します。 N, a = map(int, raw_input().split()) a -= 1 k = input() b = map(int, raw_input().split()) for i in range(N): b[i] -= 1 used = [-1]*N step = [-1]*N cur = a loop = 0 cnt = 0 w…

dwangoプログラミングコンテスト A - ニコニコ文字列2

問題 dwango2015-honsen.contest.atcoder.jp 解法 dp[n][x][renzoku][f2] = (n 文字目の時点でニコニコ文字列が x 個あり, 25 という文字列が直前に renzoku 個続いていて, 直前の文字が 2 であるかどうかのフラグが f2 である場合に, 全体としてニコニコ文…

AtCoder Regular Contest 045 B - ドキドキデート大作戦高橋君

本番書いたコードがなぜ通っているのかよくわかってない。でも通れば正義。 今まで見た ARC B 問題の中では一番むずかしい気がします。 問題 arc045.contest.atcoder.jp 解法 解説の通りやってみました。 AtCoder Regular Contest 045 解説 from AtCoder Inc…

AtCoder Regular Contest 045 C - エックスオア多橋君

ARC 045 に参加しました。途中まで B も解けなくて死ぬかと思いましたがなんとか C まで解けました。 問題 arc045.contest.atcoder.jp 解法 xor の特徴からして, 頂点 v から 頂点 u までのパスにおける xor 和 = (頂点 0 から v までの xor 和) xor (頂点 0…

CODE FESTIVAL 2014 Hard B - ぽよぽよ

ぽよ〜 問題 code-festival-2014-morning-hard.contest.atcoder.jp 解法 dp で解けます。dp[n][x] = (n 番目の人が, もとの位置から x 以下だけずれた座標にいるような場合の数) とすると, n 番目の人は, p[n]+x-1 以下の座標にいるか, p[n]+x の座標にいる…

CODE FESTIVAL 2014 Middle B - 枕決め

問題 code-festival-2014-morning-middle.contest.atcoder.jp 解法 貪欲法で解きます。右端ができるだけ左にあるものから採用するほうが最適です。ということで, アルゴリズム的には以下のようなことをやります。・a[i] が x[cur] 以下のもののうち, まだ使…

CODE FESTIVAL 2014 予選B D - 登山家

問題 code-festival-2014-qualb.contest.atcoder.jp 解法 stack でがんばります。まず, この問題では「右側に見える範囲」及び「左側に見える範囲」を別々に求められれば良いことがわかります。ということで, 右側に見える範囲を求めてみましょう。それがわ…

東京工業大学プログラミングコンテスト2015 M - コインと無向グラフ

本当に Nim だった(grundy 数かもとも思っていたのだけれど) 問題 ttpc2015.contest.atcoder.jp 解法 実は, 「距離が奇数のものからの Nim」ということで解くことが出来ます。距離が奇数のもの全体の状態が (n1, n2, ..., nk) で表されるとしましょう。 まず…

AtCoder Regular Contest 008 D - タコヤキオイシクナール

問題 arc008.contest.atcoder.jp 解法 large だと N の制約が 10^12 とかになっててビビりますが, よく考えると ai = 1, bi = 0 となっているところは無視しても良いので, 結局注目しなければならないところは M 個のみです。 ということで, まず最初に出て…

AtCoder Regular Contest 008 C - THE☆たこ焼き祭り2012

最近 Splatoon の病に陥っているので「たこ焼きを投げる」と言われるとイカがボムを投げてる姿が思い浮かぶ。 問題 arc008.contest.atcoder.jp 解法 問題の様子を見ます。点(x0, y0) の人を 0, 点(x1, y1) の人を 1, ..., 点(xn, yn) の人を n とします。 ま…

AtCoder Regular Contest 023 D - GCD区間

問題 arc023.contest.atcoder.jp 解法 まず少し考察です。区間 [s, t] にある最大公約数は, s が t から 0 に動くにつれて単調減少します。そして, その最大公約数の減少の仕方は, 素因数が 少しずつ減少していくことで生じます(例えば 6 -> 3 -> 1 と最大公…

AtCoder Beginner Contest 005 D - おいしいたこ焼きの焼き方

かみぺさんがまとめていたので解いてみることにしました。 良問,教育的問題リスト - Google スプレッドシート 問題 abc005.contest.atcoder.jp 解法 各クエリごとに計算するのではなく, データが与えられた時点で計算して, 各クエリには前計算した値でその…

CODE FESTIVAL 2015 予選A D - 壊れた電車

CODE FESTIVAL 2015 予選A に参加しました。なんとか全完, 29 位で予選通過できそうです。良かった… D 問題は過去のこどふぉに(全く同じと言っていいほど)似た問題が出てますねD問題はCodeforcesで見たからなぁ: http://t.co/8uQT9tWrKv— kmjp (@kmjp_pc) 20…

CODE FESTIVAL 2014 予選A D - 壊れた電卓

去年の予選 D 問題解いてなかったので解いてみました。結構苦戦したので予選通れるか心配になってきた。 問題 code-festival-2014-quala.contest.atcoder.jp 解法 桁 DP 的に解きます。dp[keta][state][lt][gt] = (keta 目の桁までで, 0〜9 の数字のうち sta…

東京工業大学プログラミングコンテスト2015 H - 包囲

解けなかったけどこれも良い問題。 問題 ttpc2015.contest.atcoder.jp 解法 実は答えとしてあり得る多角形は三角形か四角形しかありえません。なぜかというと, n 多角形は一般に n-2 個の三角形に分割することが出来ますが, 基本的には三角形内部に原点があ…

東京工業大学プログラミングコンテスト2015 G - titech分離

問題 ttpc2015.contest.atcoder.jp 解法 貪欲で解けます。s を逆から読んでいき, "hcetit" という文字列のうちある部分まで確定している文字列がそれぞれいくつあるかを, state という配列でまとめていきます。 例えば, tititechtech という文字列を考えます…

東京工業大学プログラミングコンテスト2015 J - 指さし

コンテスト中最後まで満点取れなかった問題。 問題 ttpc2015.contest.atcoder.jp 解法 dp[rest][ok] = (残り人数が rest 人で, すでに K 人での巡換を作ったかのフラグが ok であるような, 場合の数)とします。dp[rest][ok] から, rest 人中選ぶ人数 k のル…

東京工業大学プログラミングコンテスト2015 I - そーっとソート

これほんと感動しました。 問題 ttpc2015.contest.atcoder.jp 解法 右端から揃えていく感じでやります。例えば, 4, 2, 5, 3, 1 という順列があったとします。右端は 5 にしたいですが, 5 になっていないので右端の 1 を動かします。ルールにより, 1 の場所か…

東京工業大学プログラミングコンテスト2015 F - レシート

問題 ttpc2015.contest.atcoder.jp 解法 桁 DP します。dp[keta][kuriage] = (keta 目の桁において, 繰り上げが kuriage の時の, 揃えられる桁の最大値) とします。 A+B = X の X を求めようとするのでなく, B を求めていこうとすることで, この dp を更新し…

東京工業大学プログラミングコンテスト2015 D - 文字列と素数

東京工業大学プログラミングコンテストに参加しました。 かなり良い問題ばかりでとても楽しかったです。できればもうちょっと良い順位を取りたかった… 問題 ttpc2015.contest.atcoder.jp 解法 S に 5 種類より多い文字があるとサンプルにある通り奇数を対応…

AtCoder Beginner Contest 029 D - 1

1 位の人 4 分弱で解いてますが早すぎでしょさすがに… 問題 abc029.contest.atcoder.jp 解法 桁 DP で解きました。dp[keta][num][sf] = (keta 目の桁を見ている時点ですでに num 個の 1 を持っていて, N より小さいというフラグが sf であるような数字の個数…

Japan Alumni Group Summer Camp 2015 Day 2 G - Escape

問題 jag2015summer-day2.contest.atcoder.jp 解法 与えられたグラフを二重辺連結成分分解した際, 例えば頂点数が 2 以上で同じ連結成分になっている場合 (多重辺がないので今回の場合は 3 以上ですが)は, ある連結成分から移ってくる -> その連結成分内の点…