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


    C - Maximum Subrectangle

    因为是两个数组相乘的到的 矩阵所以  a(i ->j)*b(x->y) 的面积 就是   a(i ->j) 的和乘与b(x->y)的和

    所以我们枚举 a 序列 从1-n的长度和  B序列同理 然后 枚举两个序列和相乘 找一个最大即可

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 0x3f3f3f3f
    #define LL long long
    #define maxn 3000
    LL a[maxn],b[maxn],c[maxn],d[maxn];
    int main(){
      LL n,m,x;
      cin>>n>>m;
      memset(a,0,sizeof(a));
      memset(b,0,sizeof(b));
      for(LL j=1;j<=n;j++){
         cin>>a[j];
         a[j]+=a[j-1];
      }
      for(LL j=1;j<=m;j++){
         cin>>b[j];
         b[j]+=b[j-1];
      }
      cin>>x;
      memset(c,inf,sizeof(c));
      memset(d,inf,sizeof(d));
      for(LL j=1;j<=n;j++){
         for(LL k=j;k<=n;k++){
            c[k-j+1]=min(c[k-j+1],a[k]-a[j-1]);
         }
      }
      for(LL j=1;j<=m;j++){
         for(LL k=j;k<=m;k++){
            d[k-j+1]=min(d[k-j+1],b[k]-b[j-1]);
         }
      }
      LL mx=0;
      for(LL j=1;j<=n;j++){
         for(LL k=1;k<=m;k++){
            if(c[j]*d[k]<=x){
               mx=max(mx,j*k);
            }
         }
      }
      cout<<mx<<endl;
    }

    D - Social Circles

    D还没有写 随后写完补上

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100005
    int a[maxn],b[maxn];
    int main(){
       int n;
       cin>>n;
       for(int j=0;j<n;j++){
         cin>>a[j]>>b[j];
       }
       sort(a,a+n);
       sort(b,b+n);
       long long ans=0;
       for(int j=0;j<n;j++){
          ans+=max(a[j],b[j]);
       }
       cout<<ans+n<<endl;
       
       return 0;
    }
  • 相关阅读:
    BZOJ1001 BJOI2006 狼抓兔子
    NOI2015 程序自动分析
    高斯消元法
    [POJ] 3666 Making the Grade
    [CODEVS] 2185 最长公共上升子序列
    [模板] LIS
    [CF] 219D Choosing Capital for Treeland
    [POJ] 2823 Sliding Window
    [BZOJ] 1072 [SCOI2007]排列perm
    [POJ] 1094 Sorting It All Out
  • 原文地址:https://www.cnblogs.com/Dvelpro/p/9937355.html
Copyright © 2020-2023  润新知