A
一個有序數組A交換兩個數之后, 變成數組B, 現在給出數組B, 問它是否可能由一個A變化而來.
算法分析:
送分題, 將B排序之后比較錯誤的位置, 我這個NC居然YY了一個奇葩方法然后WA掉了.
代碼:
http://codeforces.com/contest/220/submission/2085314B
給一個長度為n(n<100,000)的序列, m(m<100,000)次詢問, 每次詢問區間[l,r]內有多少個數X出現了X次.
算法分析:
這樣的數不超過sqrt(n)個, 所以離線求出所有這樣的數, 然后去更新所有的詢問.
代碼:
http://codeforces.com/contest/220/submission/2076753C
有兩個n-排列(n<100,000){a},{b}, 定義f(a,b) = min(abs(i,j)) when ai == bj. 求{b}所有的循環與a的距離.
算法分析:
維護兩個優先級隊列A,B, A中存放的是所有(ai == bj && j >= i)的abs(i,j)值, B反之.
所以A是不斷變大的, B是不斷變小的, 有兩種情況需要改變優先級隊列的結構:
B中元素減少到0 , 小case ~~
循環的時候, 末尾的元素更新
這樣涉及到元素的刪除, 我們肯定不能真的刪除, 而是選擇彈出"廢物"節點.
于是維護一個數組, 存放每個元素的當前位置就可以了.
代碼:
http://codeforces.com/contest/220/submission/2085278
D
詢問在4000*4000的網格中, 面積是整數的三角形有多少個?
算法分析:
不妨判斷面積乘以2等于偶數的三角形有的多少, 根據叉積推導面積, 發現至于三個頂點坐標的奇偶性有關.
我們可以想像一個1*1的格子的四個點一定代表了四個種類的格子, 那么三個不同種類的格子肯定是不能構成三角形了.
然后暴力找規律發現有兩個奇偶性相同的格子一定能構成面積是整數的三角形.
于是組合數求出一個數, 減去退化的情況.
我們可以對共線的三點的最外兩點進行統計, 枚舉底和高, 4000*4000.
然后乘以起點和中間點, 中間點的數量就是底和高的gcd了.
代碼:
http://codeforces.com/contest/220/submission/2100456E
給一個長度為n的序列,(n<100,000). 問存在多少對l,r使得a1...l cons ar ...n-1的逆序數不超過k(k<long long)
算法分析:
維護l和r兩個值, 隨著l的增加, r單調不上升. 在這個過程中維護三個值:
pl 1...l 的逆序數
pr r...n-1的逆序數
pz 1...l中比r大的數
隨著r的不斷增加我們可以用線段樹維護這三個值.
代碼:
http://codeforces.com/contest/220/submission/2087403
posted on 2012-09-01 12:57
西月弦 閱讀(605)
評論(7) 編輯 收藏 引用 所屬分類:
解題報告