HihoCoder1494 一面磚牆 字首和

2021-08-27 14:22:17 字數 1284 閱讀 7612

時間限制:10000ms

單點時限:1000ms

記憶體限制:256mb

小hi的學校的教學樓前有一面磚牆。這面牆由n層磚砌成,其中從上到下第i層包含ci塊高度相同但寬度不同的磚。  

例如下圖所示的這面牆,由3層磚砌成。其中第1層包含3塊磚,從左到右寬度依次是6、4和3;第2層包含4塊磚,從左到右依次寬度依次是4、4、2和3;第3層包含3塊磚,從左到右寬度依次是5、6和2。

+------------+

| 6 | 4 |3 |

+------------+

| 4 | 4 |2|3 |

+------------+

| 5 | 6 |2|

+------------+

^

現在小hi想在牆上畫一道豎線,並且希望豎線穿過的磚塊數目越少越好(如果豎線剛好在左右兩塊磚的交界處,則不會穿過磚塊)。例如上例在牆^標示的位置畫線,只會穿過一塊磚。  

注意小hi不能在牆的左右邊沿畫線。

第一行乙個整數n,表示層數。 (1 < n <= 100000)  

以下n行每行包含若干個整數。其中第乙個整數ci代表該層磚塊的數目,之後ci個整數表示從左到右每塊磚的寬度。

整面牆總磚塊數目不超過100000,總寬度不超過100000000。

最少穿過的磚塊數目。

樣例輸入

3  

3 6 4 3

4 4 4 2 3

3 5 6 2

樣例輸出

1
很簡單的一道字首和,對於每層磚牆,我們計算出它的字首和,如果有兩層牆的字首和是相等的,那麼我們一定可以畫一條豎線同時穿過這兩層牆,於是我們只需要計算出層數最多相等的字首和res,再用層數減去這個最多層數就得出了                           ans = n - res(注意最後乙個塊磚不用管,一定是牆嘛),如果每層都開乙個陣列的話太麻煩了,用stlmap就非常方便了

這已經是去年招新賽的一道題了,今天有個學長要去年的題看到了就像寫一下,畢竟這一年走過來不能原地踏步嘛

#pragma gcc optimize ("o3")//gcc開o3優化

#pragma gcc optimize ("o2")

#includeusing namespace std;

mapmp;

int main()

scanf("%d",&x);

}printf("%d\n",n - ans);

return 0;

}

阿里一面 電話面

前端小白記錄一下面試經歷 首先面試官特別和藹可親,聲音很溫柔。開始就是做了下自我介紹,blablabla.接下來就專案談了一下做了哪些專案,用過哪些技術,遇到過哪些難題之類的。下面就是技術問題了 記住,搞懂原理很重要 1.闡述一下ajax原理 2.解釋一下vuex原理 3.vue雙向繫結原理 4.解...

阿里一面電話面

flex的理解,flex direction為row表示什麼含義,居中怎麼設定 grad布局 rem,不同瀏覽器下怎麼設定元素大小 cookie,local storage,sessionstorage之間的區別,哪個可以跟服務端通訊 localstorage設定元素的api 怎麼設定cookie不...

騰訊一面二面題目

1 new delete 和malloc free的區別 一 基本概念 malloc free 1 函式原型及說明 void malloc long numbytes 該函式分配了numbytes個位元組,並返回了指向這塊記憶體的指標。如果分配失敗,則返回乙個空指標 null void free v...