——>點我跳轉<——
有乙個每個數都不相同的陣列,然後要從最大值不停地選取數,然後每次只能從左往右掃過去,碰到的要拿的才能拿。
問你至少要弄多少次才可以點完所有數,如果掃到一半數玩了所有數,最後掃的那一次也要算上。
這道題看到這個,我們考慮直接模擬。
當然,不是模擬它掃的過程,而是列舉每個數被選的過程。
那我們先按數被選的先後順序排序。
那怎麼看要不要在輪,輪幾次呢?
因為問你是在最優條件下,那只要碰到了就一定會選。那也就是說最多隻會輪一次。因為你輪一次,就可以保證每個點都跑了一遍,就必定會跑到你要的點。
我們只要看從上乙個數到這個數不停往右移動的時候會不會碰到邊界要從第乙個繼續搜就可以了。
那怎麼看呢?容易想到是當這個數的位置在你上乙個選的數的位置的前面。
那我們就在排序的時候,記錄下每個數一開始時的位置。
然後因為最後掃完的時候那一次也要算上,所以答案要加一。
#include
#include
using
namespace std;
struct country a[
800001];
int n, ans, now;
bool
cmp(country x, country y)
intmain()
sort
(a +
1, a + n +
1, cmp)
;//先按選擇先後順序排序
for(
int i =
1; i <= n; i++
)printf
("%d"
, ans +1)
;//因為不管你最後掃沒掃完,最後那一次都要算,所以要加上1
return0;
}
nowcoder 句子逆序
將乙個英文語句以單詞為單位逆序排放。例如 i am a boy 逆序排放後為 boy a am i 所有單詞之間用乙個空格隔開,語句中除了英文本母外,不再包含其他字元 介面說明 反轉句子 param sentence 原句子 return 反轉後的句子 public string reverse s...
nowcoder 雙棧佇列
編寫乙個類,只能用兩個棧結構實現佇列,支援佇列的基本操作 push,pop 給定乙個操作序列ope及它的長度n,其中元素為正數代表push操作,為0代表pop操作,保證操作序列合法且一定含pop操作,請返回pop的結果序列。測試樣例 1,2,3,0,4,0 6 返回 1,2 用兩個棧實現佇列。cla...
nowcoder 雙棧排序
請編寫乙個程式,按公升序對棧進行排序 即最大元素位於棧頂 要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。給定乙個int numbers c 中為vector 其中第乙個元素為棧頂,請返回排序後的棧。請注意這是乙個棧,意味著排序過程中你只能訪問到第乙個元素。測試樣例 1,...