時間限制:10000ms
單點時限:1000ms
記憶體限制:256mb
小hi的學校的教學樓前有一面磚牆。這面牆由n層磚砌成,其中從上到下第i層包含ci塊高度相同但寬度不同的磚。
例如下圖所示的這面牆,由3層磚砌成。其中第1層包含3塊磚,從左到右寬度依次是6、4和3;第2層包含4塊磚,從左到右依次寬度依次是4、4、2和3;第3層包含3塊磚,從左到右寬度依次是5、6和2。
+------------+現在小hi想在牆上畫一道豎線,並且希望豎線穿過的磚塊數目越少越好(如果豎線剛好在左右兩塊磚的交界處,則不會穿過磚塊)。例如上例在牆^標示的位置畫線,只會穿過一塊磚。| 6 | 4 |3 |
+------------+
| 4 | 4 |2|3 |
+------------+
| 5 | 6 |2|
+------------+
^
注意小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...