\(A,B\) 題太水了,不說了(A題還錯了一次)
C題 Calendar Validator
有一張行數無限大,列數為 \(7\) 的矩陣,第 \(i\) 行第 \(j\) 列的值為 \((i-1)*7+j\) ,給出一個 \(n*m\) 新矩陣,判斷新矩陣是不是這個矩陣的一個完整的部分。
\(n,m\le 1000\)
其實也挺水的,判斷下一行是不是上一行對應列的數字 \(+7\) 得到,判斷當前列是不是每次遞增 \(1\) ,判斷同一行的數減去 \(1\) 后除以 \(7\) 是不是相同即可。
復雜度 \(O(nm)\)
D題 Play Train
有編號為 \([1,n]\) 的 \(n\) 列火車,有三種操作,共 \(q\) 個。
\(1\) \(x\) \(y\) :在編號為 \(x\) 的火車后接上 \(y\)
\(2\) \(x\) \(y\) :在編號為 \(x\) 的火車后斷開 \(y\)
\(3\) \(x\) :求和 \(x\) 連在一起的火車數量 \(k_i\)(還要求出具體是哪些火車)
其中 \(2\le n,q \le10^5\) ,第三種操作輸出的總量在 \(10^6\) 以內。
\(ABC\) 最水的一道 \(D\) 題,\(pre_i\) 和 \(next_i\) 維護火車 \(i\) 前一個,后一個是什么編號,初值都是 \(i\) 。
維護方法顯然,而對於詢問,每次只需要從 \(x\) 開始找到最前面的火車,即滿足 \(pre_i=i\) 的,然后向后走,知道 \(next_i=i\)
復雜度 \(O(\sum k_i+q)\)
E題 7
定義,以線段 \((x-1,y),(x,y)\) 和線段 \((x,y),(x,y-1)\) 形成的這個形狀叫做一個 “ \(7\) ”,其中 \((x,y)\) 成為中心
平面直角坐標系內有 \(n\) 個這樣的形狀,以 \((x_i,y_i)\) 為中心,求至少刪去多少個,可以使得在剩下的每個 "\(7\)" 中,以該形狀的三個端點和原點形成的四邊形不與其他四邊形有交點。
\(n \le 10^5\)
這題評分 \(1600+\) ,但是其實虛高,其實是一個經典貪心題,當時翻譯其實也出了很多鍋,估計讓很多選手沒能通過這題。
對於一個 \((x,y)\) ,考慮 \((x-1,y),(x,y-1)\) ,這個圖形占據的區域,就是以 \((x-1,y),(x,y-1)\) 和原點形成的兩條直線中間夾住的這一部分,那也就是說,如果某條直線的斜率介於這兩條直線的斜率之間,那么必然存在交點,轉化一下,設兩條直線斜率是 \(k1,k2\),那么就是 \([k1,k2]\) 被占領了,可以看作在一維數軸上這段區間被覆蓋了,那就是求最大的不相交線段數目,按照右端點排序直接貪心求就行了,另外注意此題求斜率要開 \(long\) \(double\)
F題 String Cards
給定 \(n\) 個字符串,從中選取 \(k\) 個,可以按任意順序排列后相接,求字典序最小的形成的字符串。
\(1\le k\le n\le50\)
\(F,H,G\) 三題暫時不會。