NOIP模拟38:a
这是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的更多相关文章
- Noip模拟38 2021.8.13
T1 a 跟入阵曲很像,但是忘记入阵曲这题的思路是什么了 这里再提一下,入阵曲是子矩阵和是$k$的倍数,这道题目是子矩阵和是在一段区间内$[L,R]$ 因为这道题$n$特别小,$m$较大,考虑复杂度为 ...
- 2021.8.13考试总结[NOIP模拟38]
T1 a 入阵曲.枚举矩形上下界,之后从左到右扫一遍.用树状数组维护前缀和加特判可以$A$,更保险要脸的做法是双指针扫,因为前缀和单调不减. $code:$ 1 #include<bits/st ...
- NOIP模拟 38
liu_runda的题! 错过辽QAQ T1虽然没用题解的损益法,但是用高精%还能过.. 没想到敲完就过编译了,还以为要调一天呢 高精度的阴影没了- T2的思路很巧妙 首先一个区间最多有一种颜色占一半 ...
- NOIP 模拟 $38\; \rm c$
题解 \(by\;zj\varphi\) 发现就是一棵树,但每条边都有多种不同的颜色,其实只需要保留随便三种颜色即可. 直接点分治,将询问离线,分成一端为重心,和两端都不为重心的情况. 每次只关心经过 ...
- NOIP 模拟 $38\; \rm b$
题解 \(by\;zj\varphi\) 考虑转化问题,将计算最大公约数换为枚举最大公约数. 设 \(sum_i\) 为最大公约数为 \(i\) 的方案数,可以容斥求解,\(sum_i=f_i-\su ...
- NOIP 模拟 $38\; \rm a$
题解 \(by\;zj\varphi\) 压行. 枚举两行,将中间的行压成一行,然后直接前缀和加二分. 注意边界细节问题. Code #include<bits/stdc++.h> #de ...
- noip模拟38
\(\color{white}{\mathbb{深秋总有廖落处,雁归每是菊败时,名之以:残菊}}\) 这场比赛几乎全场都在打暴力,几乎人均切掉的 \(t1\) 没有想到双指针,\(t3\) 的暴力也没 ...
- NOIP模拟38:b
这是T2. 一个容斥(其实也可以欧拉反演做,但是我不会). 首先开一个桶,记录第i行的j有多少个. 然后枚举1-\(maxn\),枚举他的值域内的倍数,记录倍数在第i行有多少个,将个数 ...
- NOIP模拟17.9.22
NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥
随机推荐
- @FeignClient常用属性
@FeignClient(name = "gateway-test", value = "gateway-test", url = "localhos ...
- DC-5 靶机渗透测试
DC-5 靶机渗透测试 冲冲冲,好好学习 .核心:footer 文件包含漏洞,wfuzz .收获总结写在文末. 谨记任务:找地方上传shell---> root. 操作机:kali 172.66 ...
- 数据库比对工具SQL(表、字段、触发器、索引、视图、存储过程)
做一个数据库比对小工具,把SQL做一个笔记 SELECT object_id AS ID --表ID,'表' sType,Name --表名FROM sys.tablesORDER BY Name-- ...
- SpringBoot - Bean validation 参数校验
目录 前言 常见注解 参数校验的应用 依赖 简单的参数校验示例 级联校验 @Validated 与 @Valid 自定义校验注解 前言 后台开发中对参数的校验是不可缺少的一个环节,为了解决如何优雅的对 ...
- 工作中后端是如何将API提供出去的?swaggo很不错
工作中后端是如何将API提供出去的?swaggo很不错 咱们上一次简单分享了 GO 权限管理之 Casbin ,他一般指根据系统设置的安全规则或者安全策略 分享了权限管理是什么 Casbin 是什么 ...
- 热血动漫番太好看了!用Python爬取了1T的动漫,内存都爆了
最近被室友安利热血动漫番<终末的女武神>和<拳愿阿修罗>,太上头了周末休息熬夜看完了.不过资源不太好找,辣条一怒爬取了资源,这下可以看个够了.室友崇拜连连,想起了我的班 ...
- STM32—SysTick系统定时器
SysTick是STM32中的系统定时器,利用SysTick可以实现精确的延时. SysTick-系统定时器 属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit 的向下 ...
- JVM快速扫盲篇
JVM虚拟机基础 JVM虚拟机结构 vm的整体结构大致如下: 类加载器:类加载器用来加载Java类到JVM虚拟机中,源代码程序.java文件在经过编译器编译之后就被转换成字节代码.class文件,类加 ...
- NOIP 模拟 $23\; \rm 联$
题解 \(by\;zj\varphi\) 区间上的问题,一般都用线段树来解决(但是这题也可以用 \(\rm ODT\)) 对于每段段区间设置三个参数,分别表示这个区间是否只有 \(1\) 或 \(0\ ...
- yum clean all大坑解决
在Centos7系统中执行yum clean all 之后,发现yum的其他执行都报错了: 要解决,关键在这里: 把/var/cache/yum/ 下面的文件删除了 接下来,如果执行yum repol ...