狠狠撸
Submit Search
AtCoder Regular Contest 035 解説
?
1 like
?
7,037 views
A
AtCoder Inc.
Follow
AtCoder Regular Contest 035 解説
Read less
Read more
1 of 17
Download now
Downloaded 20 times
More Related Content
AtCoder Regular Contest 035 解説
1.
AtCoder Regular Contest
035 解説 AtCoder株式会社 代表取締役 高橋 直大 2015/3/7 1
2.
競技プログラミングを始める前に ? 競技プログラミングをやったことがない人へ – まずはこっちのスライドを見よう! –
http://www.slideshare.net/chokudai/abc004 2015/3/7 2
3.
?AtCoder Inc. All
rights reserved. 3 A問題 高橋くんと回文 1. 問題概要 2. アルゴリズム 2015/3/7 3
4.
A問題 問題概要 ? 文字列
s が与えられる. ? *を自由な文字に置き換えて,sを回文にできるか判 定 ? *を置き換える文字はそれぞれ異なっていてもOK ? 制約 – 1 ≦ |s| ≦ 1000 2015/3/7 4
5.
A問題 アルゴリズム ? 解法1 –
前と後ろで対応する文字が同じになりうるか調べる – つまり,i 番目と |s|+1-i 番目の文字で,どちらかが * であ るか,どちらも同じ文字であるか調べる(1 <= i <= |s|) – 1つでも同じになりえない文字の組があればNO,そうでな ければYES ? 解法2 – sとsをひっくり返した文字列tの間で,sのi番目とtのi番目 が同じ文字になりうるか調べる. – 結局やっていることは同じ.この方が少し楽かも. 2015/3/7 5
6.
?AtCoder Inc. All
rights reserved. 6 B問題 アットコーダー王国のコンテスト事情 1. 問題概要 2. 考察&解法 2015/3/7 6
7.
B問題 問題概要 ? 問題がN個ある ?
それぞれの問題を解くのにかかる時間を知っている ? 解いた時間に依存するペナルティがある – 問題ペナルティ=コンテスト開始からその問題を正解するまでの時間 – コンテストペナルティ=問題ペナルティの総和 ? 全完するときの最小コンテストペナルティと,それを 達成する解き方の数を求めよ ? 制約 – 1 ≦ N ≦ 100000 – 1≦(各問題を解くのにかかる時間)≦ 1000 2015/3/7 7
8.
B問題 考察&解法 ? コンテストペナルティ最小を達成するためには, かかる時間の小さい問題から解けば良い →かかる時間順でソートして,シミュレーションする (最大ケースで答えが32bit整数を超えるので注意) ?
かかる時間が同じ問題は,解く順序を入れ替えても 最小ペナルティが変わらない. →かかる時間が同じ問題がx個あったら,解き方はx!通り ? 全体の組み合わせ数としては,それらの積が答え ? 計算量 – ソートにO(n log n) ←標準ライブラリを使いましょう – その他 O(n) 2015/3/7 8
9.
?AtCoder Inc. All
rights reserved. 9 C問題 アットコーダー王国の交通事情 1. 問題概要 2. 考察 3. 解法 2015/3/7 9
10.
C問題 問題概要 ? N頂点,M本の辺から成る重み付き無向グラフがある ?
このグラフにK本無向辺を新たに追加する ? 追加する度に,全点対間の距離の和を求めよ ? 制約 – 1 ≦ N ≦ 400, 1 ≦ M ≦ 1000, 1 ≦ K ≦ 400 – 1≦(各問題を解くのにかかる時間)≦ 1000 2015/3/7 10
11.
C問題 考察 ? 全点間最短距離を求めるワーシャルフロイド法を用いる →O(N^3)で全点間距離テーブルが計算可能 →辺が1つ増える毎にテーブルをO(N^3)で更新していて はTLE ?
ある辺を既存の辺より小さいコストの辺に変更するとき O(N^2)でテーブル更新可能 →コストがcの辺(a,b)を追加時,頂点i,j間の最短距離 cost[i][j]は以下のように更新される cost[i][j] = min( cost[i][j], cost[i][a] + cost[b][j] + c, cost[i][b] + cost[a][j] + c) ※cost[][]は全点間最短距離を記録した二次元テーブル 2015/3/7 11
12.
C問題 解法 ? まとめると –
最初にO(N^3)で全点間最短距離テーブルを構築 – 辺の追加時に毎回O(N^2)でテーブル更新 ? を行うことで満点を得れる ? 計算量: O(N^3 + KN^2) ? 余談ですが,ワーシャルフロイドのアルゴリズムは O(N^3)ですが,アルゴリズムが非常に単純なので, 多少頂点数が多くても高速に動作することが多いで す. 2015/3/7 12
13.
?AtCoder Inc. All
rights reserved. 13 D問題 高橋くんとマラソンコース 1. 問題概要 2. アルゴリズム 2015/3/7 13
14.
D問題 問題概要 ? 南北?東西方向の道があり,交差点の間を北?東方 向にのみ進める. ?
交差点上にN個のチェックポイントがある. ? 以下の2つのクエリーを処理 – kj 番目のチェックポイントを (aj,bj)に設定しなおす – チェックポイントl1jからチェックポイントr1jまでの経路数と, チェックポイントl2jからチェックポイントr2jまでの経路数のう ち,どちらが多いか答える.ただし,多い方は少ない方の 2倍以上. ? 制約 – 2<=N<=2*10^5 – 1<=(チェックポイントの座標)<=10^6 2015/3/7 14
15.
D問題 アルゴリズム ? 東西方向で東を正にX軸,南北方向に北を正にY軸を取 ります. ?
隣り合うチェックポイントのx座標の差がdx,y座標の差 がdyのとき,その2つのチェックポイント間の経路の数は dx+dyCdx =(dx+dy)!/(dx!)/(dy!) (dx個の→,dy個の↑の並べ替えの個数に等しいから) ? チェックポイントaからチェックポイントbまでの経路の数 は,(aとa+1間の経路数)*(a+1とa+2間の経路数)* ‥ *(b-1とb間の経路数) ? 経路数はメチャクチャでかくなりそう. – (1,1) から (10^6,10^6) への経路数の時点でヤバイ ? 経路数の計算では掛け算?割り算しか出てこない. 2015/3/7 15
16.
D問題 アルゴリズム ? 普通に計算するのはよくない ?
logを取ってみよう!! – 0<a<b のとき log(a)<log(b) なので,大小関係が維持され る. – log(a*b)=log(a)+log(b) , log(a/b)=log(a)-log(b) から,経路 数は楽に計算できそう. – 数がそこまででかくならない ? (1,1) から (10^6,10^6) までの経路数をwとおくと,log(w)は10^6ぐ らい. – 大と小で2倍差があれば,logを取った値はlog(2)≒0.69以 上差があるので誤差もOK 2015/3/7 16
17.
D問題 アルゴリズム ? 部分点解法では,番号が隣り合う2つのチェックポイ ントの間の経路数にlogを取ったものを毎回計算し, それらの和の大小を比較する. –
予め階乗にlogを取ったものを求めておく必要がある ? 満点解法では,セグメント木を使い,区間の和を求 められるようにしておく. – チェックポイントの更新では,その前後の経路数を更新 – 比較では,和の大小を比較 2015/3/7 17
Download