可見的山峰對數量
乙個不含有負數陣列可以代表一圈環形山,每個位置的值代表山的高度。比如,,或都代表同樣結構的環形山。3->1->2->4->5->3 方向叫作 next 方向(逆時針),3->5->4->2->1->3 方向叫作 last 方向(順時針)。
山峰 a 和 山峰 b 能夠相互看見的條件為:
如果 a 和 b 是同一座山,認為不能相互看見。
如果 a 和 b 是不同的山,並且在環中相鄰,認為可以相互看見。
如果 a 和 b 是不同的山,並且在環中不相鄰,假設兩座山高度的最小值為 min。如果 a 通過 next 方向到 b 的途中沒有高度比 min 大的山峰,或者 a 通過 last 方向到 b 的途中沒有高度比 min 大的山峰,認為 a 和 b 可以相互看見。
問題如下:
給定乙個不含有負數且沒有重複值的陣列 arr,請問有多少對山峰能夠相互看見?
輸入描述:
第一行乙個整數 t,表示測試資料的組數。
每組資料的第一行有三個數字 n, p, m,其中 n 表示 山峰的數量,
山峰的高度陣列等於 1 - p 的 p! 個全排列按字典序排序後的第 m 個全排列的前 n 項。
輸出描述:
輸出一行乙個整數表示答案。
示例輸入
1
5 5 2
輸出7
說明1-5 的全排列排序後的第二個排列 為 1 2 3 5 4
備註:
1 ≤t
≤10000
1 \le t \le 10000
1≤t≤10
0001≤n
≤p
≤1000000
1 \le n \le p \le 1000000
1≤n≤p≤
1000
0001≤m
≤p
!1 \le m \le p!
1≤m≤p!
題解:找規律。。。。結果為 2∗n
−3
2*n-3
2∗n−3。
我們假設尋找的規則是 「小找大」 ,這樣保證不會漏掉某種情況。
**:
#include
using
namespace std;
intmain
(void
)return0;
}
可見的山峰對數量
題目 乙個不含有負數的陣列可以代表一圈環形山,每個位置的值代表山的高度,比如 3,1,2,4,5 4,5,3,1,2 或 1,2,4,5,3 都代表同樣結構的環形山。3 1 2 4 5 3方向叫做next方向 逆時針 3 5 4 2 1 3方向叫做last方向叫做last方向 順時針 山峰a和山峰b...
棧與佇列10 可見的山峰對數量
乙個不含有負數的陣列可以代表一圈環形山,每個位置的值代表山的高度。有兩個方向 next方向 逆時針方向 last 方向 順時針 山峰a和山峰b相互看見的條件為 如果a和b是同一座山,認為不能相互看見 如果a和b是不同的山,並且在環中相鄰,認為可以相互看見 如果a和b是不同的山,並且在環中不相鄰,假設...
尋找最後的山峰
山峰元素是指其值大於或等於左右相鄰值的元素。給定乙個輸入陣列nums,任意兩個相鄰元素值不相等,陣列可能包含多個山峰。找到索引最大的那個山峰元素並返回其索引。分析 本問題思想較為簡單,即比較與討論數字相鄰兩數字之間的大小即可。但應考慮到幾種特殊的情況 1 只含有乙個山峰且山峰在開頭 2 山峰在末尾 ...