zoukankan      html  css  js  c++  java
  • JZOJ 5842

    Description

    给定一个n*m 的 01 矩阵,求包含[l,r]个 1 的子矩形个数。
     

    Input

    第一行,两个正整数n,m。
    接下来n 行,每行一个长度为 m 的 01 串,表示给定的矩阵。接下来一行,两个自然数 l,r。
     

    Output

    第一行,一个整数代表答案。
     

    Data Constraint

    做法:由于n很小,我们可以枚举n,统计答案。

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #define LL long long
     5 #define rep(i,a,b) for(int i=a;i<=b;i++)
     6 using namespace std;
     7 int n,m;
     8 int a[32][50007],Q[32][50007],f[50007],L,R;
     9 LL ans;
    10 
    11 void Init(){
    12     scanf("%d%d",&n,&m);
    13     char ch=getchar();
    14     rep(i,1,n){
    15         rep(j,1,m){
    16             char ch=getchar();
    17             a[i][j]=ch-'0';
    18             Q[i][j]=Q[i-1][j]+Q[i][j-1]-Q[i-1][j-1]+a[i][j];
    19         }
    20         char ch=getchar();
    21     }
    22     scanf("%d%d",&L,&R);
    23 }
    24 
    25 void Calc(int up,int down){
    26     rep(i,1,m)    f[i]=Q[down][i]-Q[up-1][i];
    27     int l=0,r=0;
    28     rep(i,1,m){
    29         for(;f[i]-f[r]>=L&&r<i;r++);
    30         for(;f[i]-f[l]>R&&l<i;l++);
    31         ans+=r-l;
    32     }
    33 }
    34 
    35 void Work(){
    36     ans=0;
    37     rep(i,1,n)
    38         rep(j,i,n)
    39             Calc(i,j);
    40     printf("%lld",ans);
    41 }
    42 
    43 int main(){
    44     freopen("a.in","r",stdin);
    45     freopen("a.out","w",stdout);
    46     Init();
    47     Work();
    48 } 
    View Code
  • 相关阅读:
    JSP学习-10-EL表达式
    深入浅出Mybatis(一)
    第10章—开启事务
    第09章—使用Lombok插件
    第08章—整合Spring Data JPA
    第06章—热部署
    第05章—Swagger2打造在线接口文档
    第03章—打造RESTful风格API
    第04章—整合Mybatis
    第01章—快速构建
  • 原文地址:https://www.cnblogs.com/traveller-ly/p/9541714.html
Copyright © 2011-2022 走看看