網頁

Monday 5 July 2010

IOI 2003 Comparing Code

做法類似搵 maximum common substring

首先map哂佢d variable名做數字
之後fix其中一條sequence, 窮舉第2條sequence係佢上面的位置 (或者調轉)

不同於搵common substring, 判斷valid唔valid要睇埋之前的
方法就係用2支pointer做掃描線!

valid 就 tail++
invalid 就 head++

判斷valid的方法
一開始諗住2個sequence, 把variable一個對返對應的variable
不過唔work

例如

Seq 1:

A = B + C
A = B + B

Seq 2:

X = W + Y
X = Y + Y


compare 第一句 statement 時, 對 X->A 無問題
但係 "W->B, Y->C" 和 "W->C, Y->B" 是有分別的, 而且要在之後先睇得出來


之後就想到了"記上一次出現的位置"的方法
位置指的是 第?句statement的左邉/右邊

即不再記 X->A, 而是記 "X對上一次出現是在第一句statement的左邊"
每次checking就係睇下這些 "位置" 是否吻合

就解決了問題

No comments:

Post a Comment