嘟嘟嘟

这道题我觉得跟最大子矩阵那道题非常像,都是O(n4)二维前缀和暴力很好想,O(n3)正解需要点转化。

O(n4)暴力就不说啦,二维前缀和,枚举所有矩形,应该能得55分。

O(n3)需要用到降维的思想。先考虑这么个问题:对于一个序列,求区间和是k的倍数的区间个数。有点想法的暴力就是前缀和预处理,然后O(n2)枚举。那么能不能不枚举呢?观察会发现,任意两个 mod k余数相同的前缀和相减得到的区间,都能被k整除。有了这一点,这道题就变成求余数相同的前缀有多少对了。那么开一个数组dp[i]记录余数为 i 的前缀有多少个,则有dp[i] * (dp[i] - 1) / 2对。O(n)即可完成。

现在升级成二维。那么只要枚举矩形上下两条边,当这两条边固定的时候就变成了上述问题了。时间复杂度O(n3)。

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-;
const int maxn = ;
const int maxk = 1e6 + ;
inline ll read()
{
ll ans = ;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) {last = ch; ch = getchar();}
while(isdigit(ch)) {ans = (ans << ) + (ans << ) + ch - ''; ch = getchar();}
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < ) x = -x, putchar('-');
if(x >= ) write(x / );
putchar(x % + '');
} int n, m, K, a[maxn][maxn];
ll sum[maxn][maxn], ans = ;
int dp[maxk], num[maxn], cnt = ; int main()
{
n = read(), m = read(), K = read();
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j) a[i][j] = read();
for(int j = ; j <= m; ++j)
for(int i = ; i <= n; ++i) sum[j][i] = sum[j][i - ] + a[i][j];
for(int i = ; i <= n; ++i)
for(int j = i; j <= n; ++j)
{
cnt = ;
num[++cnt] = ; dp[] = ;
ll Sum = ;
for(int k = ; k <= m; ++k)
{
Sum += sum[k][j] - sum[k][i - ];
int tp = Sum % K;
if(!dp[tp]) num[++cnt] = tp;
dp[tp]++;
}
for(int k = ; k <= cnt; ++k)
{
ans += (ll)dp[num[k]] * (ll)(dp[num[k]] - ) / ;
dp[num[k]] = ;
}
}
write(ans), enter;
return ;
}

luogu P3941 入阵曲的更多相关文章

  1. [luogu]P3941 入阵曲[前缀和][压行]

    [luogu]P3941 入阵曲 题目描述 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时候,觉得整个世界都焕然 ...

  2. Luogu P3941 入阵曲【前缀和】By cellur925

    题目传送门 题目大意:给你一个\(n\)*\(m\)的矩阵,每个位置都有一个数,求有多少不同的子矩阵使得矩阵内所有数的和是\(k\)的倍数. 数据范围给的非常友好233,期望得到的暴力分:75分.前1 ...

  3. 【思维】Luogu P3941 入阵曲

    题目大意 洛谷链接 给出一个矩阵和 \(K\) ,问有多少子矩阵中的元素和能整除 \(K\). 数据范围 \(2\leq n,m\leq 400\),\(0\leq K\leq 10^6\). 思路 ...

  4. 洛谷P3941入阵曲

    题目传送门 这道题也是今年湖南集训队Day8的第一题,昨天洛谷的公开赛上又考了一遍,来发个记录(其实是因为五月天,另外两道题分别是将军令和星空,出这次题目的人肯定同为五迷(✪㉨✪)) 话不多说.先理解 ...

  5. P3941 入阵曲

    \(\color{#0066ff}{ 题目描述 }\) 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时候,觉得整 ...

  6. [洛谷P3941] 入阵曲

    题目背景 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 入阵曲 题解在代码里. #include<iostream> #include<cstdio> #include& ...

  7. 落谷P3941 入阵曲

    题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...

  8. [洛谷P3941]:入阵曲(前缀和+桶)

    题目传送门 题目背景 丹青千秋酿,一醉解愁肠.无悔少年枉,只愿壮志狂. 题目描述 小$F$很喜欢数学,但是到了高中以后数学总是考不好.有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识 ...

  9. 题解 P3941 入阵曲

    题解 观察数据范围,可以 \(\mathcal O(n^2m^2)\) 暴力计算,而加上特殊性质,则可以骗到 \(75pts\) 正解: 我们发现,在一维情况下,\(\mod k\) 相同的前缀和相减 ...

随机推荐

  1. ng-value中格式化日期

    ng-value="conferenceinfo.create_time | date:'yyyy-MM-dd'"

  2. Magento 2开发教程 - 创建新模块

    视频在youtube网站国内访问不了,可以使用FQ软件查看. 视频地址:www.youtube.com/embed/682p52tFcmY@autoplay=1 下面是视频文字介绍: Magento ...

  3. sp里拼接html table标签

    DECLARE @xml NVARCHAR(MAX) --generate mail body SET @xml = CAST(( SELECT --[ID] 'td','' -- ,[Status] ...

  4. Spring - 几种RPC模型的使用与比较

    Spring中,用JMS搞RPC时会用到: org.springframework.jms.remoting.JmsInvokerServiceExporter org.springframework ...

  5. 无限滚动条的css布局理解

    一.需求描述 做一个waymo的滚动条,在页面中显示两张图,一共4张图,无限滚动播放. .car{ width: 600px; height: 157px; margin: 100px auto; b ...

  6. tapable事件流插件

    tapable Webpack本质上是一种事件流的机制,它的工作流程就是将各个插件串联起来,而实现这一切的核心就是Tapable,webpack中最核心的负责编译的Compiler和负责创建bundl ...

  7. Maven pom.xml 常用打包配置

    <build> <!-- 指定JAVA源文件目录 --> <sourceDirectory>src</sourceDirectory> <!-- ...

  8. Java BeanUtils 组件 使用

    1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件. BeanUtils ...

  9. MySQL数据库(5)----删除或更新已有行

    有时候,会需要删除某些行,或者修改其内容.这是候便需要用到DELETE语句和UPDATE语句. 1. DELETE 语句的基本格式如下所示: DELETE FROM tbl_name WHERE wh ...

  10. mac crontab

    1.前提工作 正常情况下mac普通用户是无法使用crontab的,需要做如下修改: 在~/.vimrc下添加这么一行: autocmd filetype crontab setlocal noback ...