數學題 澆水解題報告

2021-06-10 05:38:21 字數 2221 閱讀 7998

澆水

(water.c/cpp/pas)

【題目描述】

lazychild在青島二中科技樓裡種了一排n棵樹,每棵樹都有乙個高度。他會列舉所有的區間,然後從區間中找出乙個高度最矮的樹進行澆水(照顧弱者)。由於lazychild澆完水之後就精疲力竭了,所以請你幫助他計算每棵樹都被澆了幾次水。

【輸入檔案】

第一行乙個整數n。

第二行n個整數,分別表示每棵樹的高度。

【輸出檔案】

一行n個整數用空格隔開,分別表示每棵樹被澆了幾次水。

【樣例輸入】 3

1 3 5

【樣例輸出】

3 2 1

【樣例解釋】

lazychild列舉到了6個區間分別是[1],[3], [5], [1 3], [3 5], [1 3 5],對應的最矮的樹的高度是1, 3, 5, 1, 3, 1。

【資料規模和約定】

對於40%的資料,n <= 1000

對於100%的資料,n <= 1000000,保證每棵樹的高度都不相同

【考察點】

乘法原理的運用

【思路】

首先想到的肯定是暴力列舉,但是這樣做只能通過40%的資料。於是我們就來考慮優化問題:首先來看,某棵樹要被澆水的條件是它在某區間內是最小的,於是我們就很容易想到單調佇列,但是這個區間長度不一定,所以單調佇列不能解決問題;那麼再看,我們可以發現,在某個區間內,如果某個點是最小的,那麼只要是包含這個點的子區間,都是對他澆水,於是我們就可以考慮列舉這個點,並且分別向左、向右掃瞄,找出第乙個小於他的位置,根據乘法原理,可以得出,這個點的澆水次數為l*r,但是這樣的最壞情況是n^2的(每個點都掃瞄整個數列,雖然題目保證高度不同,達不到這個程度,但是畢竟不保險)。所以我們就來思考如何在更低的時間複雜度內求出每個點的l、r:觀察可以發現,某點的l、r可以由附近的點推出(結論就不說了,自己推導看看),於是就能ac了。

【提交情況】

第1次wa6組,第2次ac

【經驗】

l*r可能會爆longint,另外這樣的語句s:=l*r,即使l、r分別沒爆longint,s是int64的,若l*r爆掉了longint,s中存的就是爆掉之後的值。因為它的計算原理是先求出l*r的32位長整,再將這個數強制轉換成64位長整……

【收穫】

經驗中的那個東西……

programwater;

var n:longint;

l,r,a:array[0..1000001]of longint;

sum:array[0..1000001]of int64;

procedureterminate;

begin

close(input);

close(output);

halt;

end;

procedureinit;

var i:longint;

begin

assign(input,'water.in');

assign(output,'water.out');

reset(input);

rewrite(output);

readln(n);

for i:=1 to n do

begin

read(a[i]);

end;

end;

functioncon1(x,t:longint):int64;

begin

if a[l[x]]a[i] thenl[i]:=con1(i-1,i)

else l[i]:=i-1;

end; //推l

for i:=n downto 1 do

begin

if a[i]>a[i+1] then r[i]:=i+1

else r[i]:=con2(i+1,i);

end; //推r

for i:=1 to n do

begin

t1:=i-l[i];

t2:=r[i]-i; //計算左邊、右邊的數

sum[i]:=t1*t2;

//萬惡的計算……

end;

for i:=1 to n do

write(sum[i],' ');

end;

begin

init;

main;

terminate;

end.

accode:

解題報告 數學

1 函式 又是函式 問題描述 話說leve最最最討厭數學,每次考試都因為數學悲劇 大頭頭還極其可惡的冒天下之大不韙的讓同學們把那本16開500頁的2012高考數學核按鈕做完 為什麼要叫核按鈕呢?你懂得 現在,leve被一道函式題難住了,為了省出更多的時間學oi,她把這道題交給了你。給定乙個函式f x...

小學數學題

小學數學題1 usetyp 1 目標 擷取字串usetyp 注意,usetyp的長度是可變的 問題 求以上字串usetyp的長度 注意usetyp的長度是不固定 設usetyp的長度 p 已知1 號的索引位置x indexof 已知理論2 字串長度 最大索引 1 所以,p x 1 3 p x 2 所...

數學題亂記

在 delta abc 中,滿足 cos 2 cfrac 判斷三角形形狀。其中 begin cos 2 cfrac cfrac cfrac sin 1 cos cfrac sin 1 cos cfrac 1 cos cfrac cos cfrac end 根據餘弦定理有 cos cfrac 所以可得...