这是T1。

  考场上思路与正解就差个前缀,打的线段树,因为其巨大常数快乐挂掉。。。。。。

  正解复杂度是\(O(n^2m)\),其实再挂个\(log\)也能过,但是需要用常数极其优秀的树状数组外加大大大大大大大大大大大大大大大大力卡常。

  有点像之前做的入阵曲一题。

  首先\(n\)很小,那么考虑\(O(n^2)\)枚举上下界,然后用一个指针扫一边,具体实现比较像入阵曲,可以参考着看。

  大部分思路是一样的,只是有一点,这题要做桶的前缀和。

  首先要证明一点就是点个数比自己小的矩阵一定在自己前面,那就可以统计完桶后,直接前缀,前缀可以直接用。

  其实即使没有这个性质也可以直接统计桶,做前缀然后加减,因为即使桶所记录的矩阵在自己后面,从自己这里统计也没关系,只要能保证一一对应不会统计重或漏即可

  这也可以看作统计的一个原则,就是只要不重不漏,统计方式是无所谓的。

Code
#include<bits/stdc++.h>
using namespace std;
namespace STD
{
#define rr register
#define scanf ybbb=scanf
typedef long long ll;
const int M=5e4+4;
const int N=32;
int n,m,l,r,ybbb;
char s[M];
int mat[N][M];
int ton[30*M];
int read()
{
rr int x_read=0,y_read=1;
rr char c_read=getchar();
while(c_read<'0'||c_read>'9')
{
if(c_read=='-') y_read=-1;
c_read=getchar();
}
while(c_read<='9'&&c_read>='0')
{
x_read=(x_read<<3)+(x_read<<1)+(c_read^48);
c_read=getchar();
}
return x_read*y_read;
}
};
using namespace STD;
int main()
{
n=read(),m=read();
for(rr int i=1;i<=n;i++)
{
scanf("%s",s+1);
for(rr int j=1;j<=m;j++)
if(s[j]=='1')
mat[i][j]=1;
}
l=read(),r=read();
for(rr int i=1;i<=n;i++)
for(rr int j=1;j<=m;j++)
mat[i][j]+=mat[i][j-1];
for(rr int i=1;i<=n;i++)
for(rr int j=1;j<=m;j++)
mat[i][j]+=mat[i-1][j];
ll ans=0;
for(rr int i=1;i<=n;i++)
for(rr int j=i;j<=n;j++)
{
for(rr int k=1;k<=m;k++)
{
if(!l)
ans+=ton[mat[j][k]-mat[i-1][k]];
ton[mat[j][k]-mat[i-1][k]]++;
}
for(rr int k=1;k<=mat[j][m]-mat[i-1][m];k++)
ton[k]+=ton[k-1];
for(rr int k=1;k<=m;k++)
{
int temp=mat[j][k]-mat[i-1][k];
if(l<=temp&&temp<=r) ans++;
if(l<=temp)
{
if(l)
{
if(temp>r)
ans+=ton[temp-l]-ton[temp-r-1];
else
ans+=ton[temp-l];
}
else
{
if(temp>r)
ans+=ton[temp-l-1]-ton[temp-r-1];
else
ans+=ton[temp-l-1];
}
}
}
for(rr int k=0;k<=mat[j][m]-mat[i-1][m];k++)
ton[k]=0;
}
printf("%lld\n",ans);
}

NOIP模拟38:a的更多相关文章

  1. Noip模拟38 2021.8.13

    T1 a 跟入阵曲很像,但是忘记入阵曲这题的思路是什么了 这里再提一下,入阵曲是子矩阵和是$k$的倍数,这道题目是子矩阵和是在一段区间内$[L,R]$ 因为这道题$n$特别小,$m$较大,考虑复杂度为 ...

  2. 2021.8.13考试总结[NOIP模拟38]

    T1 a 入阵曲.枚举矩形上下界,之后从左到右扫一遍.用树状数组维护前缀和加特判可以$A$,更保险要脸的做法是双指针扫,因为前缀和单调不减. $code:$ 1 #include<bits/st ...

  3. NOIP模拟 38

    liu_runda的题! 错过辽QAQ T1虽然没用题解的损益法,但是用高精%还能过.. 没想到敲完就过编译了,还以为要调一天呢 高精度的阴影没了- T2的思路很巧妙 首先一个区间最多有一种颜色占一半 ...

  4. NOIP 模拟 $38\; \rm c$

    题解 \(by\;zj\varphi\) 发现就是一棵树,但每条边都有多种不同的颜色,其实只需要保留随便三种颜色即可. 直接点分治,将询问离线,分成一端为重心,和两端都不为重心的情况. 每次只关心经过 ...

  5. NOIP 模拟 $38\; \rm b$

    题解 \(by\;zj\varphi\) 考虑转化问题,将计算最大公约数换为枚举最大公约数. 设 \(sum_i\) 为最大公约数为 \(i\) 的方案数,可以容斥求解,\(sum_i=f_i-\su ...

  6. NOIP 模拟 $38\; \rm a$

    题解 \(by\;zj\varphi\) 压行. 枚举两行,将中间的行压成一行,然后直接前缀和加二分. 注意边界细节问题. Code #include<bits/stdc++.h> #de ...

  7. noip模拟38

    \(\color{white}{\mathbb{深秋总有廖落处,雁归每是菊败时,名之以:残菊}}\) 这场比赛几乎全场都在打暴力,几乎人均切掉的 \(t1\) 没有想到双指针,\(t3\) 的暴力也没 ...

  8. NOIP模拟38:b

      这是T2.   一个容斥(其实也可以欧拉反演做,但是我不会).   首先开一个桶,记录第i行的j有多少个.   然后枚举1-\(maxn\),枚举他的值域内的倍数,记录倍数在第i行有多少个,将个数 ...

  9. NOIP模拟17.9.22

    NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥

随机推荐

  1. YOLO-V4 实现口罩识别(附加数据、数据批量处理程序)

    一.YOLO-v4概念 如果想要了解和认识yolo-v4的基本概念,首先要提的就是它的基础版本yolo-v1,对于yolo来说,最经典的算是yolo-v3.如果想要了解它的由来和历史的话,可以自行搜索 ...

  2. Java 使用 Apache commons-math3 线性拟合、非线性拟合实例(带效果图)

    Java 使用 CommonsMath3 的线性和非线性拟合实例,带效果图 例子查看 GitHub Gitee 运行src/main/java/org/wfw/chart/Main.java 即可查看 ...

  3. 仅用CSS实现图片渲染特效 (有学习到了)

    前言 实现图片高亮效果等特效,就不得不提到CSS3的滤镜filter属性,CSS过滤器是一个强大的工具,可以使用它来实现不同的视觉效果(有点像浏览器的Photoshop过滤器).CSS filter属 ...

  4. JQuery常用属性操作,动画,事件绑定

    jQuery 的属性操作        html() 它可以设置和获取起始标签和结束标签中的内容. 跟 dom 属性 innerHTML 一样.        text() 它可以设置和获取起始标签和 ...

  5. rancher恢复kubecfg配置文件

    docker run安装的单容器Rancher Server # 进入容器 docker exec -ti <容器ID> bash # 集群ID,可通过浏览器地址栏查询 cluster_i ...

  6. 从零开始的Java RASP实现(二)

    目录 2 RASP-demo 2.1 类加载机制 双亲委派 BootStrap ClassLoader 2.2 Instrumentation介绍 Instrumentation类中常用方法 Inst ...

  7. MySQL-11-存储引擎

    存储引擎简单介绍 存储引擎:相当于Linux文件系统,只不过比文件系统强大 功能 数据读写 数据安全和一致性 提高性能 热备份 自动故障恢复 高可用方面支持 存储引擎种类 InnoDB MyISAM ...

  8. 【笔记】使用scikit-learn解决回归问题

    使用sklearn解决回归问题 依然是加载数据 import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...

  9. Java面试常见基础问题

    1.equals和==有什么区别? ==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致. 如:两个String对象存储的值是一样的,但是可能在内存里存储在不同的地方. equals ...

  10. 零基础学Java之Java学习笔记(二):Java快速入门

    提出要求: 开发一个 HelloWorld.java 程序,可以输出 "Hello,world!" 开发步骤: (1)将 Java 代码编写到扩展名为 HelloWorld.jav ...