CS Academy: Growing Segment

問題と解法 記憶力があれなので同じ問題を何度も解く。kenkoooo.hatenablog.com コード use std::cmp; use std::collections::BTreeSet; macro_rules! input { (source = $s:expr, $($r:tt)*) => { let mut iter = $s.split_whitespace(); input_inner!{iter…

AtCoder Regular Contest 083 E - Bichrome Tree

問題 https://beta.atcoder.jp/contests/arc083/tasks/arc083_c 解法 いつもありがとうございます。頂点 v を根とする部分木で、頂点 v と同じ色の頂点の重みの合計は x[v] だが、同じ色でない頂点の重みの合計は小さければ小さいほどよい。よって、「頂点 v…

Battle Conference U30 - Programming Battle F - 数列と計算

問題 https://beta.atcoder.jp/contests/bcu30/tasks/bcu30_f 解法 全く同じ問題が CodeChef で出ている。https://ei1333.hateblo.jp/entry/2017/06/04/151131 コード use std::ops::*; const MOD: usize = 1e9 as usize + 7; fn main() { let mut sc = Scan…

AtCoder Regular Contest 081 F - Flip and Rectangles

問題 https://beta.atcoder.jp/contests/arc081/tasks/arc081_d 解法 解説の通り。最大長方形を求めるのは AOJ で学べた。http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DPL_3_B コード use std::cmp; use std::collections::VecDeque; trait T…

AOJ Largest Rectangle

問題 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DPL_3_B 解法 各列についてヒストグラムに内接する最大長方形を求める。 コード use std::cmp; use std::collections::VecDeque; trait TopQueue<T> { fn top(&self) -> &T; } impl<T> TopQueue<T> fo</t></t></t>…

AtCoder Regular Contest 073 E - Ball Coloring

問題 https://beta.atcoder.jp/contests/arc073/tasks/arc073_c 解法 解説のとおりだが、個人的には理解が難しかった。(分かると簡単シリーズ) 最小のボールが青、最大のボールが赤のとき 最小のボールを持つ青は、残りのボールをできるだけ小さくしたい。…

AtCoder Regular Contest 077 E - guruguru

問題 https://beta.atcoder.jp/contests/arc077/tasks/arc077_c 解法 x を設定することによって切り替えが高速化している区間を持っておく。 x を 1 増加させるとそれらの区間の切り替え時間はそれぞれ 1 ずつ短くなる。 コード use std::cmp; use std::coll…

C - Not Too Close SoundHound Programming Contest 2018 Masters Tournament 本戦 (Open)

問題 https://beta.atcoder.jp/contests/soundhound2018-summer-final-open/tasks/soundhound2018_summer_final_c 解法 解説が全く理解できなかったので下記ブログを参考にした。ありがとうございます。http://fluffyowl.hatenablog.com/entry/2018/07/31/00…

CS Academy: Growing Segment

問題 https://csacademy.com/contest/archive/task/growing-segment/ 解法 いつもありがとうございます。 削除しても大丈夫な辺を下から見ていく x[i] -> x[i+1] を削除するときことを考える x[i+1] は削除して問題ないので消す。 x[i+2] は消せるか? (x[i]…

SoundHound Programming Contest 2018 Masters Tournament 本戦 (Open) E - Hash Swapping

問題 E - Hash Swapping 解法 セグメント木の子ノード j に を入れておき、合計値を求める際に の逆元をかけることでハッシュを取り出せるようにする。各ノードは左右の子ノードへのポインタ(ポインタ操作は Rust で安全にやろうとすると重くなるので、実際…

Rust でライブコーディングをした

rust.connpass.com これの LT 枠でライブコーディングをした。 動機 Rust は比較的難しい言語だと思う(ふわっと書いてふわっと動くタイプの言語ではない)ので、聴衆が自分でもできそうと思えるようなパフォーマンスをしたかった。 問題選定 Rust の標準ラ…

Rust で競技プログラミングをする時に使う高速な標準入力 Scanner

struct Scanner { ptr: usize, length: usize, buf: Vec<u8>, small_cache: Vec<u8>, } #[allow(dead_code)] impl Scanner { fn new() -> Scanner { Scanner { ptr: 0, length: 0, buf: vec![0; 1024], small_cache: vec![0; 1024], } } fn load(&mut self) { use st</u8></u8>…

同じディレクトリに複数の CMakeLists.txt を置きたい時

github.com . ├── CMakeLists.txt # Root.cmake を include するだけ ├── main.cpp # main() ├── Mods # │ ├── Mod1.cmake # mod1.cpp => mod1 にする │ ├── mod1.cpp # │ ├── mod1.h # │ ├── Mod2.cmake # mod2.cpp => mod2 にする。実は Mod1 に依存してい…

AGC 003 D - Anticube

問題 https://beta.atcoder.jp/contests/agc003/tasks/agc003_d 解説 各 s_i を素因数分解する(方法は後で考える)。まず、 s_i に 3 つ同じ素因数が含まれるとき、それらを取り除いてしまっても構わない。例えば のとき、 を取り除いて と考えて良い。この…

ARC 072 D - Alice&Brown

問題 D - Alice&Brown 解法 実験すると |x-y|grundy 数が 0 になりそうな気がするので、結論ありきで帰納法で証明する。 コード use std::collections::{BTreeMap, BTreeSet}; fn main() { let mut sc = Scanner::new(); let x: u64 = sc.read(); let y: u64…

CODE FESTIVAL 2016 Grand Final C - Cheating Nim

問題 C - Cheating Nim 解法 Grundy 数の原理から、「各 もしくは の XOR の値を 0 にすることが出来るか?出来るなら を使った回数は何回か?」という問題に言い換えることができます。ここで、ある i について を使うと XOR の値 x は になります。すなわ…

「みんなのプロコン2018」 D - XOR XorY

問題 D - XOR XorY 解法 解説を読んでも分からなかったので 「みんなのプロコン 2018」: D - XOR XorY · うさぎ小屋 を参考にした。 または ということは なので とすると となる。以後、 を満たす を数え上げることにする。 i=j でも条件を満たすため より …

SoundHound Inc. Programming Contest 2018 (春) D - 建物

問題 D - 建物 解法 (i, j) から (i, k) に移動して (i+1, k) に移動する経路 (i, j) => (i+1, k) を考える。このとき、 (i, j-1) => (i+1, k) よりも多くの報酬が得られることに留意する。次に (i+1, k+1) に移動する経路を考える。このとき (i, j-1) => (i…

SoundHound Inc. Programming Contest 2018 (春) C - 広告

問題 C: 広告 - SoundHound Inc. Programming Contest 2018 (春) | AtCoder 解法 グリッドグラフでの最大安定集合を求めたい。最大安定集合は最小点被覆の補集合なので、最小点被覆問題を解く。二部グラフでは最小点被覆問題は最大マッチング問題の双対なの…

LG Gram 14Z970-GA55J レビュー

LG Gram 買いました 会社の MacBook Pro 2015 13-inch を使っていましたが、会社をやめるにあたって自分用の PC を買いました。かなり悩んだ末買いましたが思ったより良かったのでレビューを書いておきます。 商品リンク http://amzn.to/2Csklt8 購入の際の…

並列二分探索(解説なしバージョン)

adventar.org並列二分探索、名前からして難しそうな感じがしていたが、特に難しいわけではなかった。 並列二分探索 個人的には並列という名前は正しくない気がします。普通の二分探索は次の通り。 let mut ng = 0; let mut ok = m; for _ in 0..30 { let med…

ベイエリアでソフトウェアエンジニアとして働いてわかった、たった 1 つのこと

--------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------- ---------------------------…

CODE FESTIVAL 2017 Final E - Combination Lock

問題 E - Combination Lock 解法 方針としては、 区間を整理しやすいように文字列の長さを偶数にする。 区間の整理をめっちゃ頑張る 端から区間を見ていけば良いだけの状態になったら imos 法で順番に処理していき、ダメだったら NO 文字列の長さを偶数にす…

AtCoder Problems を支える技術

adventar.org はじめに AtCoder Problems というサービスを作っています。最近作り直しています。http://beta.kenkoooo.com/atcoder/これは AtCoder の提出を全部クロールして、一覧で見れるようにしたものです。最近は機能が増えすぎていますが・・・ソース…

フィボナッチヒープ

adventar.org フィボナッチヒープとは この記事ではヒープは最小値を求めるものとします。フィボナッチヒープとは、フィボナッチ数の性質をうまく使ってならし計算量で高い性能を持ったヒープです。 ヒープ フィボナッチヒープ 二分ヒープ 最小値の削除 なら…

リクルートコミュニケーションズを退職しました

adventar.org 豆知識 この記事のタイトルでググると、まともな記事が出てきます。 退職しました 20 ヶ月ほど勤務したリクルートコミュニケーションズ (RCO) を退職しました。RCO ではウェブ広告リアルタイム配信チームで、主に高速化を頑張りました。かなり…

AOJ 2829 Room Assignment

問題 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2829 解法 JAG の wiki に分かりやすい解説があります。2017/Practice/模擬国内予選/講評 - ACM-ICPC Japanese Alumni Group場合分けとしては以下の 3 つです 長さ 3 以上の閉路が存在する場…

AOJ 3019 Picnic

問題 Picnic | Aizu Online Judge 解法 ワーシャルフロイド→巡回セールスマン→半分全列挙→個数制約付きナップサック コード import java.util import scala.io.StdIn import scala.util.Try object Main extends App { val INF: Long = 1e15.toLong val (n, …

AIM Tech Round 4 (Div. 1) D. Dynamic Shortest Path

問題 http://codeforces.com/contest/843/problem/D 解法 最初にダイクストラで距離を求めておき、各クエリごとにダイクストラで追加で増えた分の距離を計算して加算していく。各クエリごとに距離は 1 しか増えないので、キューを距離の数だけ用意すれば、ク…

会津合宿 2017 2 日目 G : Picnic

問題 http://judge.u-aizu.ac.jp/onlinejudge/cdescription.jsp?cid=ACPC2017Day2&pid=G 解法 ワーシャルフロイドと巡回セールスマン問題の bit DP で、ある町の部分集合を回って戻ってくるのにかかるコストを前計算しておく。さらに、町の集合を の 2 つに…