Alice in Foxland ~狐の国のアリス~

Slides:



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

G 問題 コードアート オンライン 原案:西出 ライタ:伊藤 テスタ:西出. 問題概要 0 大きさのさまざまな n 個の円に多角形 m 個を入れら れるか判定する問題 0 ただし、同じ円に複数の多角形を入れることはでき ない 0 もし、入れられる場合は、辞書順最小の入れ方を出 力 ① ② ③ ① ②.
原案 : 野田 解答 : 野田・山 口 問題文 : 野田 PROBLEM E: PSYCHIC ACCELERATOR ~ とある超能力の物体加速器~
模擬国内予選2013 Problem F テトラ姫のパズル 原案:須藤 解答:大友、須藤 解説:須藤.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
J: Magical Switches JAG 模擬地区予選 2013 原案:保坂 解答:保坂・楠本 解説:保坂.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
LZ符号化 森田 岳史.
ICPC夏合宿09 Day3 Problem D : Luigi‘s Tavern -ルイージの酒場-
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
Revenge of the Round Table
Day2 Problem I: Memory Match ~神経衰弱~
Problem H: Queen’s case
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
プログラミング言語としてのR 情報知能学科 白井 英俊.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
ファイルやフォルダを検索する ①「スタート」→「検索」→「ファイルとフォルダ」とクリックする。
ある最適化問題 スポーツスケジューリング スポーツスケジューリングとは? 生成方法 プログラムと問題点 2001年2月7日(水)
I: Tokyo Olympics Center
問題作成・解説: 北村 解答作成協力: 小西・松本
Problem G : Entangled Tree
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
Problem H ねこ鍋改造計画(仮) 秋葉 拓哉.
文字配列の課題1 解説 /* a */ #include <stdio.h> main( ) { int i;
原案:阿部 担当:福澤, 笠原 英訳:寺島 解説:福澤
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
 Combinations(2)        古川 勇輔.
第6章 2重ループ&配列 2重ループと配列をやります.
条件式 (Conditional Expressions)
模擬国内予選2014 Problem C 壊れた暗号生成器
2013年度模擬アジア地区予選 Problem E: Putter
Problem F Two-finger Programming
【会議の進め方】会議の定義:問題を解決する場であり情報を共有する場ではない 作成:増永寛之
CGと形状モデリング 授業資料 長井 超慧(東京大学)
C 言語について 補足資料 資料および授業の情報は :
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
データ構造とアルゴリズム 第14回 文字列の照合.
形式言語とオートマトン Formal Languages and Automata 第4日目
問題:The hik Revolutions 解説:田村(sune2)
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
知識情報演習Ⅲ(後半第3回) 辻 慶太
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
知識情報演習Ⅲ(後半第3回) 辻 慶太
WindowsMobile de HelloWorld
WindowsMobile de HelloWorld
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
アルゴリズムとプログラミング (Algorithms and Programming)
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
D: 壊れかけのヒープ 問題案: 稲葉.
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
プログラミング演習I 2003年7月2日(第11回) 木村巌.
第16章 動的計画法 アルゴリズムイントロダクション.
プログラミング入門 電卓を作ろう・パートI!!.
第6回:得点を表示しよう! (文字の表示、乱数)
情報処理Ⅱ 2006年11月24日(金).
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
7月13日の演習問題・解答例 について ネットワーク長が 18、22、26、28 の場合の
参考:大きい要素の処理.
C問題 高所恐怖症 原案・ライタ : 伊藤 テスタ : 青木・西出.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
データ構造とアルゴリズム 第14回 文字列の照合.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
「図書系職員のための アプリケーション開発講習会」
Presentation transcript:

Alice in Foxland ~狐の国のアリス~ 原案: 荒木 担当: 林崎、末松 英文: 平野 解説: 林崎

背景 (1) 世界はきつねでできています 世界のどんなカケラの中にも きつねはいます そんな世界にいる研究者 Aliceさんの ためにプログラムを書きましょう なんて本番中にストーリー追ってる人なんて いませんよね

背景 (2) DNA(Defoxyrenardnucleic Acid)と RNA(Renardnucleic Acid)は、 ‘a’~‘z’の核酸塩基の配列からなります 実世界のDNA, RNAとは綴りが違います 特定の部分配列C(例えば“fox”)を含むDNAは触媒として働きます 研究者のAliceさんは、Cを含む、 できるだけ長いDNAを合成したい

背景 (3) DNAの合成には以下の手順を踏みます 材料としてDNA X, Yを用意する Xの配列をコピーして RNA X’ を合成する Yも同様に RNA Y’’ を作る ここで、X’’ と Y’’ の配列が一致するようにする RNA X’’, Y’’ を使って DNA Z を合成する

要するに 文字列 X, Y, C が与えられる 1600文字以内 XとYのCommon Subsequenceのうち Cを(substringとして)含む 最長の文字列Zを求めよ 複数ある場合は任意の一つ 存在しなければ Impossible

基本的なアイデア (1) “fox” の各文字のX,Y内のマッチ位置は、 先頭が決まれば後はgreedyに詰めて良い C = “fox” として以下解説 X: aaaafaaoaoaxxaoaxaaa Z: aaafoxaaaa Y: aaafaaaaaaoaaxaaaa

基本的なアイデア (2) 下図黒線のようにマッチさせればよい fが決まったら、それ以外は全て左に詰める 紫線のようにマッチさせても損するだけ X: aaaafaaoaoaxxaoaxaaa Z: aaafoxaaaa Y: aaafaaaaaaoaaxaaaa

解法1 (1) DP Longest Common Subsequenceの改造 DP[i][j][0] = (Xのi文字目以降)と(Yのj文字目以降)との Common Subsequenceのうち最長の長さ DP[i][j][1] = (Xのi文字目以降)と(Yのj文字目以降)との Common Subsequenceのうち Cを含むものの最長の長さ

解法1 (2) 基本的にLCS DP[i][j][0] = max{ DP[i+1][j][0], DP[i][j+1][0], DP[i+1][j+1][0]+1 (X[i]==Y[j]のみ) }; これはLCSそのもの

解法1 (3) 基本的にLCS DP[i][j][1] = max{ DP[i+1][j][1], DP[i][j+1][1], DP[i+1][j+1][1]+1,(X[i]==Y[j]のみ) DP[i’+1][j’+1][0] + Clen (ここが違う; 次スライド) }; Clen: Cの長さ DP[0][0][1]が求める最長配列の長さ

解法1 (4) DP[i’+1][j’+1][0] + Clen i’/j’: X/Yのi/j文字目以降をgreedyに“fox”とマッチングさせた場合の最後の文字の位置 i i’ X: aaaa faaoaoax xaoaxaaa Z: aaafoxaaaa Y: aaa faaaaaaoaax aaaa j j’

解法1 (5) Xのi~i’文字目, Yのj~j’文字目を“fox”に マッチング(Clen文字; 水色枠) + 残りを普通にLCS (灰色枠) i i’ X: aaaa faaoaoax xaoaxaaa Z: aaafoxaaaa Y: aaa faaaaaaoaax aaaa j j’

解法1 (6) 計算量 (n:X,Yの長さ m:Cの長さ) i→i’は事前計算してテーブル引きする DPのステート数はO(n2) 工夫するとO(nm)になる DPのステート数はO(n2) 1ステートあたり計算量はO(1) 全体計算量はO(n2) テーブル引きしないとO(n3)で TLE

解法2 (1) 本質的にあまり変わらない Cの最初の文字のマッチング位置(i,j)を決める 最後の文字のマッチング位置(i’,j’)が決まる i i’ X: aaaa faaoaoax xaoaxaaa Z: aaafoxaaaa Y: aaa faaaaaaoaax aaaa j j’

解法2 (2) (i,j)以前と(i’,j’)以降(図の灰色枠部分)は それぞれ単なるLCS それらのLCSとCをつなぐ i i’ X: aaaa faaoaoax xaoaxaaa Z: aaafoxaaaa Y: aaa faaaaaaoaax aaaa LCS + “fox” + LCS j j’

解法2 (3) これを全ての(i,j)の組について調べて 最大長を取る 計算量: O(n2) あらかじめLCSを実行して、 (Xの最初/最後i文字)と(Yの最初/最後j文字)のLCS長のテーブルを作っておく i→i’, j→j’のテーブルも作っておく 計算量: O(n2) テーブル作成、全(i,j)の検査共にO(n2)

ダメな解法 DP[i][j][k]: (Xのi文字目以降)と(Yのj文字目以降)のCommon Subsequenceのうち、 (Cのk文字目以降)を(prefixとして)含むものの最大長、的なDP O(n3)=16003=40億 TLEの前にMLE

Judges’ solutions 110~140行 実行時間: 6秒~24秒

Statistics Submit: 42 (15 teams) Accept: 13 First Accept: 104min (echizen.bat)

おまけ:問題文ネタ解説 きつね担当: 林崎

どうみてもネタ問題文です “people with watchful eyes will find foxes in every fragment of the world.” 「よく見ると、世界の断片の一つひとつに きつねがかくれているものだ。」 この文の通り、問題文にもきつねが たくさん隠れていました。 いくつ気づいたでしょうか。

きつね (1) Defoxyrenardnucleic Acid (DNA), Renardnucleic Acid (RNA) Professor Fuchs Fuchs: 狐(ドイツ語) Professor Hu (胡) 化狐のよく使う姓。中国語で狐の発音はhu

きつね (2) In 2323, ... In 2369, ... ふさふさ。別に狐に限らないけど。 A-Zを0-9にマッピングして電話番号を文字列表記する方法を使うと A FOX → 2369 参考: PKU 1002

きつね (3) DNAs can be easily obtained by extraction from some plants such as glory lilies. 和名キツネユリ Tail Environmental Natural Catalyst Organization TENCO(天狐)。あと尻尾。

きつね (4) Sample Input内 czujthebdgfoliskax fennec oinarisama xiaorong 狐(チェコ語) fennec oinarisama xiaorong 順にフェネック(狐の一種), お稲荷様, 小栄 (聊斎志異「嬰寧」に見える狐の少女の名) 縦読みで fox