180 likes | 279 Views
OAQ 的期中考. 7101 寶石奇兵. 容許的排序演算法: Θ(n lg n) , ex: merge sort, quick sort, heap sort…. 排序的標準: (1) 分數愈大愈前面 (2) 時間愈短愈前面 (3) 字典排序愈小愈前面 最後再循序找名次就可以了。. 7101 寶石奇兵. 寫排序的時候,好像很容易錯亂 ? 不,其實框架都是固定的。 假設把這個 struct 當成 int 來看的話呢? node a[100], 只需要把 a[i] 和 a[j] 比大小就好 !!
E N D
7101 寶石奇兵 • 容許的排序演算法:Θ(n lg n),ex: merge sort, quick sort, heap sort…. • 排序的標準: (1) 分數愈大愈前面 (2) 時間愈短愈前面 (3) 字典排序愈小愈前面 • 最後再循序找名次就可以了。
7101 寶石奇兵 • 寫排序的時候,好像很容易錯亂? 不,其實框架都是固定的。 • 假設把這個struct當成int來看的話呢? node a[100],只需要把a[i]和a[j]比大小就好!! 不如寫個function比大小
7101 寶石奇兵 • 這樣的話,sort會變什麼樣子(以merge sort為例,依此類推) 原始的merge sort 修改的merge sort
7101 寶石奇兵 • 其實比對字串大小的話,可以愛用strcmp, intstrcmp ( const char * str1, const char * str2 ); • 字串比對可以多使用函式庫:(可參考以下網址) • http://www.cplusplus.com/reference/clibrary/cstring/
7102 完美洗牌2.0 • 這是錯的OAQ • N=26, 2*N = 52時是個特例(Dr. Hon上課時有證明) • 以6張牌來說:1必定跟著2的腳步,2必定跟著4… 1->2->4->1(cycle!!) 3->6->5->3(cycle!!) • 因此,我們要找的是各張牌在哪個cycle,再看走了幾步。
7102 完美洗牌2.0 • 怎麼去找cycle??????????????????????? 1個人必定只跟著1個人。
7103 切割木棍 • 其實就跟作業沒兩樣…. • 唯一要注意的case是N=1的時候,因為不用切割,所以成本是0。
7104, 7105 陣列和問題連發7108, 7109 棋盤問題連發 • 這題允許的方法: • 6個for迴圈,超級暴力OAQ • 加完之後每一格代表的意思是(1,1)~(i, j)的和 • 如果要找(i, j)~(k, q)的和的話? 橫的加 直的加
7104, 7105 陣列和問題連發7108, 7109 棋盤問題連發 • 淺咖啡的是重覆減掉的地方,所以要加回來。
7104, 7105 陣列和問題連發7108, 7109 棋盤問題連發 • 假設我們做事只做一半………. • 假設今天想知道第2行到第3行的和有沒有出現x,可以把2~3行的數字視為是一維的,如下: • 然後就可以使用一維的方法找x了(or最大最小值) 然後就不加直的了…
7104, 7105 陣列和問題連發7108, 7109 棋盤問題連發 • 因此,我們只要窮舉任2行,之後把他們之間的總和視為1-D的陣列就可以換成1D的case了。 • 窮舉的話只要, 1-D的方法是O(n),所以總共 • 這告訴我們,有些事做一半真的比較好@@....
7106 珍珠項鍊 • 這其實也是作業題,小小變化一下就可以了。
7109 消字遊戲 • 把LRUDFB視為[]{}(),就變成作業題目了XD
7010 少年湯姆的煩惱 • 這題真的讓湯姆的室友Bass煩惱很久… • 這題可以想成 • 似曾相識?? • 國中的時候老師有告訴我們,這個答案是這些座標的中位數。 • 因此我們只要求中位數就好了!!!!!!! • 特殊的情形是偶數的情形,因為題目有說取最小的,所以只要取中位數最左那個點就好了!!
題外話 • 好的排版有助於debug以及程式邏輯比較不會混淆~~
OAQ • 請大家不要擔心分數問題。 • 有努力就會有相對的回報!!