1. 程式人生 > 其它 >Java:http的post請求(帶引數json格式)示例程式碼

Java:http的post請求(帶引數json格式)示例程式碼

到目前為止只有 T1,T3。

T2,T4 應該是要長時間鴿子了。

T1 廊橋分配(airport)

這次 T1 帶有很大的迷惑性。

其實吧本身這個 T1 不難,以國內區為例子,我們設 \(s_{u}\) 表示當分配給國內區 \(u\) 個廊橋的時候國內區有幾架飛機能夠停靠,不難發現如果規定 \(s_{u}\) 表示有幾架飛機剛好停在第 \(u\) 個廊橋,就可以直接單點修改然後做一遍字首和。

由於飛機停靠遵循先來後到原則,因此實際上求出 \(s_{u}\) 陣列是可以用兩個優先佇列解決的,複雜度 \(O(n \log n)\)

對國內區和國際區分別做一次,得到 \(s1,s2\) 兩個陣列之後,答案就是 \(\max_{i=0}^{n}(s1_i+s2_{n-i})\)

這個做法倒是挺簡單的,就是一個貪心思路,但問題是考場上給的兩個小樣例很具有迷惑性,讓人以為如果設 \(f(x)=s1_x+s2_{n-x}\),這個 \(f(x)\) 是滿足單峰性的,然後很多人就寫了個三分於是愉快的掛掉了()

實際上考場上的大樣例輸出來看一眼就知道 \(f(x)\) 並不滿足單峰性,然後就知道三分是假的了。

當然那個大樣例的圖畫出來大概是這樣的:

也就是說實際上大樣例面對部分三分是能過的,還是相對比較水,當然至少有些人的三分被卡了。

Update:貌似三分的時候 \(r-l>50\) 之後轉暴力就能場切……

T2 括號序列(bracket)

先咕著。

T3 迴文(palin)

這道題我考場上的時候敲了個 \(O(2^n)\)(不是 \(O(2^{2n})\)) 的程式碼,然後成功搞到 40pts。

進入正題。

我們設 \(Match_i\) 表示互相相等的兩個數,另外那個數的位置,也就是說如果 \(a_i=a_j\),那麼 \(Match_i=j,Match_j=i\)

然後我們就可以得到一個奇怪的性質:設每次取出 \(a_i\) 之後我們在 \(Match_i\) 位置上打個標記,那麼除第一個數之外,每次取出的數 \(a_j\)\(Match_j\) 位置左右兩邊有且僅有一個位置是有標記的。

證明的話其實也比較簡單:

我們發現箭頭指的那個點左右兩邊都被打標記了,這個數所匹配的另一個數比左右兩個數都要遲一點取出,由於取出的數列是個迴文串,那麼這個打箭頭的數必須要先被取出,可是這樣的話左右兩邊就有一個數要被取出了,這樣就打破了迴文串的性質。

至於說左右兩邊一個都沒有為什麼不可行(第一個數除外),也是可以類似證明的,因為有數字被你卡在裡面了。

然後我們根據上述性質貪心的從左邊選,找到解就輸出,沒了。

這個複雜度是 \(O(T\sum n)\) 的,但是我不會證qwq

T4 交通規劃(traffic)

先咕著。