Problem F Two-finger Programming

Slides:



Advertisements
Similar presentations
Problem A : Everlasting...? 原案 : 泉 模範解答 : 黄・野田 解説 : 野田.
Advertisements

G 問題 コードアート オンライン 原案:西出 ライタ:伊藤 テスタ:西出. 問題概要 0 大きさのさまざまな n 個の円に多角形 m 個を入れら れるか判定する問題 0 ただし、同じ円に複数の多角形を入れることはでき ない 0 もし、入れられる場合は、辞書順最小の入れ方を出 力 ① ② ③ ① ②.
原案 : 野田 解答 : 野田・山 口 問題文 : 野田 PROBLEM E: PSYCHIC ACCELERATOR ~ とある超能力の物体加速器~
Lecture02-Binary Search Trees 通信情報システム専攻 岩間伊藤研究室 M1 前田圭介.
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
J: Magical Switches JAG 模擬地区予選 2013 原案:保坂 解答:保坂・楠本 解説:保坂.
Problem J: いにしえの数式 問題作成・解説: 北村 解答作成協力: 八森.
第6回 線形計画法の解法(4) 混合最小値問題 山梨大学.
4.3 マージソート.
ICPC夏合宿09 Day3 Problem D : Luigi‘s Tavern -ルイージの酒場-
連続系アルゴリズム演習 第2回 OpenMPによる課題.
Revenge of the Round Table
Day2 Problem I: Memory Match ~神経衰弱~
Problem H: Queen’s case
コンパイラ 2011年10月17日
第11回 整列 ~ バケットソート,基数ソート,ヒープソート~
言語処理系(4) 金子敬一.
Problem G : Entangled Tree
Problem H ねこ鍋改造計画(仮) 秋葉 拓哉.
原案:阿部 担当:福澤, 笠原 英訳:寺島 解説:福澤
プログラミング演習(2組) 第12回
JAG Regional Practice Contest 2012 問題C: Median Tree
文法と言語 ー文脈自由文法とLL構文解析ー
原案: 矢藤(kohyatoh) 解答: 高原(rankalee, shimejitan), 矢藤 解説: 矢藤
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
第二回 連立1次方程式の解法 内容 目標 連立1次方程式の掃出し法 初期基底を求める 連立1次方程式を掃出し法を用いてExcelで解析する
データ構造とアルゴリズム 分割統治 ~ マージソート~.
Problem C: Princess' Japanese
模擬国内予選2014 Problem C 壊れた暗号生成器
2013年度模擬アジア地区予選 Problem E: Putter
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
第 七 回 双対問題とその解法 山梨大学.
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
原案・解説 : 野田 解答 : 野田・吉田 Problem D Futon ~布団~.
A First Course in Combinatorial Optimization Chapter 3(前半)
コンパイラ 2011年10月24日
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
第4回JavaScriptゼミ セクション2-8 発表者 直江 宗紀.
XML Transformation Language Based On Monadic Second Order Logic
言語プロセッサ 第7回目 平成27年11月16日.
本時の目標 「簡単なプログラム言語の意味を理解し、マクロ機能を使って簡単なプログラムを作ることができる。」
暗黙的に型付けされる構造体の Java言語への導入
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
問題:The hik Revolutions 解説:田村(sune2)
ソフトウェア制作論 平成30年10月3日.
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
言語プロセッサ 第8回目 平成22年11月22日.
マイクロソフト Access での SQL 演習 第4回 並べ替え(ソート)
言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる.
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
文法と言語 ー文脈自由文法とLL構文解析ー
コンパイラ 2011年10月20日
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
D: 壊れかけのヒープ 問題案: 稲葉.
同期処理のモジュール化を 可能にする アスペクト指向言語
パターン認識 ークラスタリングとEMアルゴリズムー 担当:和田 俊和 部屋 A513
コンパイラ 2012年10月29日
JAVA入門③ 配列とコレクション.
情報工学概論 (アルゴリズムとデータ構造)
ミニテスト12解答 月曜3校時 大月 美佳.
述語論理式の構文と意味 一階述語論理式の構文 一階述語論理式の意味 述語,限量記号 自然言語文の述語論理式表現 解釈 妥当,充足不能
pf-5. 関数呼び出し,スコープ (Python プログラミング基礎を演習で学ぶシリーズ)
11.動的計画法と擬多項式時間アルゴリズム.
コンパイラ 2012年10月11日
:: の扱い 長谷川啓.
情報処理Ⅱ 小テスト 2005年2月1日(火).
Presentation transcript:

Problem F Two-finger Programming 解答:寺島・林崎 英文:寺島・吉野 解説:寺島

解答状況 Submitted : 1 (1 teams) Solved : 1 First Accepted : 211 min (echizen.bat)

問題概要 プログラムの変数名の付け替え できるだけ短くしたい 使っていい文字は’f’,’j’のみ

プログラムの文法 重要なのは2点 字句解析は極めて簡単 構文解析はほとんど不要 ‘{‘’}’の対応と識別子だけ見れば十分

解法(1) 貪欲法 最大に割り当てられる変数集合から短い名前を割り当てていく 独立したスコープの変数には同じ名前を割り当てられる点に注意

貪欲法(step 1) スコープの最大割り当て数 = max(max{スコープに属する変数の頻度}, sum{サブスコープの最大割り当て数}) サブスコープ 6 : ga 4 : gb 3 : saa 2 : sab 6 > 3+2 {ga}にfを割り当て 2 : sba

貪欲法(step 2) スコープの最大割り当て数 = max(max{スコープに属する変数の頻度}, sum{サブスコープの最大割り当て数}) サブスコープ 6 : f 4 : gb 3 : saa 2 : sab 4 < 3+2 {saa,sba}にjを割り当て 2 : sba

貪欲法(step 3) スコープの最大割り当て数 = max(max{スコープに属する変数の頻度}, sum{サブスコープの最大割り当て数}) サブスコープ 6 : f 4 : gb 3 : j 2 : sab 4 > 2 {gb}にffを割り当て 2 : j

貪欲法(step 4) スコープの最大割り当て数 = max(max{スコープに属する変数の頻度}, sum{サブスコープの最大割り当て数}) サブスコープ 6 : f 4 : ff 3 : j 2 : sab 0 < 2 {sab}にfjを割り当て 2 : j

貪欲法(step 5) スコープの最大割り当て数 = max(max{スコープに属する変数の頻度}, sum{サブスコープの最大割り当て数}) サブスコープ 6 : f 4 : ff 3 : j 2 : fj 2 : j

解法(2) DP スコープの割り当て順序を求める 短い名前から順に割り当てる サブスコープの割り当て順序をまとめる 各サブスコープのi番目の変数集合を同じ名前を割り当てる変数集合とする そのスコープに属する変数を出現頻度でソートし,マージする 短い名前から順に割り当てる

DP 6 : ga 4 : gb 3 : saa 2 : sab f <= 6 : ga j <= 5 : saa,sba サブスコープ 6 : ga 4 : gb 3 : saa 2 : sab f <= 6 : ga j <= 5 : saa,sba ff <= 4 : gb fj <= 2 : sab マージ 2 : sba 5 : saa,sba 2 : sab サブスコープをまとめる

特殊な扱いが必要な例 IF(hoge) { VAR foo; foo = 1; } hoge = 0; VAR bar; bar = hoge; IF(j) { VAR f; f = 1; } hoge = 0; f = hoge; 同じ変数名を 使用可能

暗黙のスコープ 特殊例への対処 変数宣言でスコープを作る サブスコープが閉じた直後にスコープを作る サブスコープが閉じた後の変数宣言でスコープを作る

暗黙のスコープ IF(hoge) { {VAR foo; foo = 1; }} hoge = 0; {VAR bar; bar = hoge; } IF(hoge) { VAR foo; foo = 1; }{ hoge = 0; VAR bar; bar = hoge; } IF(hoge) { VAR foo; foo = 1; } hoge = 0; {VAR bar; bar = hoge;

計算量 O(n log n + m) この問題ではO(m n log n)で十分 n変数,mスコープ DP, 暗黙のスコープへの対処を2or3で 割り当て順序をまとめる処理をn回に抑える まとめる先のほうが小さければswapすることで可能 この問題ではO(m n log n)で十分