Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) C. Maximum Subrectangle

來源:互聯網
上載者:User

標籤:昨天   img   .com   com   fill   sync   二分   結束   return   

昨天做的,今天才想起來,要寫個部落格,記一下這種矩陣題怎麼做。

首先我沒有意識到,每個方向上累和,得到兩個累和數組,它們的子序列之積,就是子序列對應的矩形地區範圍內所有數字之和,說起來有點抽象,但是舉個栗子吧,

就像用例裡面的這張提示圖,橫座標我選子列2,3,則和為5,縱座標我選子列1,2,則和為3。那麼3和5,乘積為15,而把矩陣中對應地區的和相加,也是15,。則這個問題就容易了:只需要枚舉一維數組就可以了。但是,如果枚舉一維數組,那豈不是要做一個四重迴圈?其實不然。

題目要我們獲得一個不大於限定數值的最大值,在此之前,我們需要對其中一個序列做一個預先處理:二重迴圈枚舉所有子列,計算對應子列長度下的最小子列和(最小,才能保證取更多的點,也就是更長的長度,也就是更大的面積)。之後,可以選定兩個中的另一個序列,用一個二重迴圈得到子列和,再用限定數值除以這個和,得到一個目標值。之後,在最初預先處理得到的數組中二分尋找目標值,返回大於它的第一個值,也就是用upper_bound,求出之後長度減一即可,這樣保證長度最長。最後,用尋找得到的長度和當前子列長度相乘,得到的結果始終取最大值,迴圈結束之後,就是答案。

#include <bits/stdc++.h>#define N 2005#define INF 0x7fffffffusing namespace std;typedef long long ll;int a[N],b[N];ll ma[N],x;int main()  {    ios::sync_with_stdio(false);    cin.tie(0);    int n,m,ans=0;    fill(ma,ma+N,INF);    cin>>n>>m;    for (int i=1;i<=n;i++)  {cin>>a[i];a[i]=a[i-1]+a[i];}    for (int i=1;i<=m;i++)  {cin>>b[i];b[i]=b[i-1]+b[i];}    cin>>x;    for (int i=1;i<=n;i++)  {        for (int j=i;j<=n;j++)  {            ll tsm=a[j]-a[i-1];            int len=j-i+1;            ma[len]=min(ma[len],tsm);        }    }    for (int i=1;i<=m;i++)  {        for (int j=i;j<=m;j++)  {            ll sc=x/(b[j]-b[i-1]);            int len=j-i+1;            int mxa=upper_bound(ma+1,ma+n+1,sc)-ma-1;            ans=max(ans,len*mxa);        }    }    cout<<ans<<endl;    return 0;}

Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) C. Maximum Subrectangle

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.