1. 程式人生 > >2017sc膜你賽6 比賽筆記

2017sc膜你賽6 比賽筆記

線性 n) software target imp 快速 數據結構 nbsp ref

這次測試的結果,只有兩個字,不好。

一開始看到第一題。什麽?連偽代碼都給出了?BST?當然沒有這麽簡單。在學Treap的時候就知道,BST在面對有序數組的時候,由於不平衡,每次插入的時間會達到O(N)。很顯然,這題N^2無法承受。怎麽辦呢?我在草稿紙上畫出一個線性的序列,試圖在圖中找出什麽規律。然後,想到一種方法,不建樹,用線段樹,直接根據BST的性質找出所有的祖先,進行計數。一開始興奮得不得了。後來才發現,這樣做跟BST直接做,本質上是一樣的!樹仍是不平衡的,祖先仍需遍歷。所以一點用都沒有……

於是我想,能不能用Treap來維護呢?我當時只是想,用Treap來代替BST固然可以快速插入,但是根本實現不了題目所求的功能。旋轉的時候,整棵樹的結構都發生了變化,做不了啊。找規律?我宣告放棄。

(賽後聽說用Treap求前驅後繼什麽鬼的,表示根本沒想過這麽搞。仔細想想,我的那種方法不行,實際上是因為遍歷了所有的祖先,能不能得到最近的祖先呢?這似乎可以用求前驅後繼來解決?是這意思嗎?還沒好好看題解,不清楚)

第二題笑臉。^=^哈哈哈哈哈真好笑啊(內心已淚奔)。一看,就是一道數學題。要求a^b=c^d,顯然硬枚舉嚴重超時,而且算乘方的時候就會炸掉(不過可以用哈希來比較,但是沒有什麽意義, 超時嚴重)

我倒是不想打枚舉。還是找到了一點規律的。比如說,1應單獨處理,除1以外底數相同的都可以直接計入答案。然後,就只要求除1以外的等式了。等式當然是符合某些性質的。比如說2^6=(2^2)^3=(2^3)^2=(2^6)^1。也就是說,可以通過分解指數因數的方法得到所有的方案。這樣時間復雜度應該是O(N^2)左右,好歹會有點分吧。但是一開始的我too young too simple,竟然以為只要將指數不斷地除以2來獲得方案,答案自然是不對的。調了半天,發現錯誤之後,已經是為時已晚,身心俱疲,懶得改了。

Yhf神犇A了這題。賽後聽他跟別人解釋,聽到一點邊角料。分解的思路跟我差不多?其實想一想,也能發現N^2做法有重復的操作。現在決定在講之前再想想。

說到第三題。簡直是毫無頭緒。它要求修改一段的值,但是這一段每個值加的都不同。於是我懵逼了。最後只能打了個線段樹了事。結果30分。有趣的是,純暴力居然60分啊哈哈哈哈哈哈哈。容我靜靜。

總而言之,這次測試,我或許想到了一點點內容,但是終因為自己的馬虎,自己的不夠堅持,自己沒有深究的勇氣而宣告失敗。另外,還有對新學算法不熟悉的原因。勇敢、全面、深入地思考,真是太重要了。或許比賽時應有的心態,應有的經驗,就是要這樣一點一點積累下來的吧。我相信,不懼難,不放棄,努力地想,深入地想,終會有所收獲吧。

2017sc膜你賽6 比賽筆記