luogu P3941 入阵曲
这道题我觉得跟最大子矩阵那道题非常像,都是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 入阵曲的更多相关文章
- [luogu]P3941 入阵曲[前缀和][压行]
[luogu]P3941 入阵曲 题目描述 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时候,觉得整个世界都焕然 ...
- Luogu P3941 入阵曲【前缀和】By cellur925
题目传送门 题目大意:给你一个\(n\)*\(m\)的矩阵,每个位置都有一个数,求有多少不同的子矩阵使得矩阵内所有数的和是\(k\)的倍数. 数据范围给的非常友好233,期望得到的暴力分:75分.前1 ...
- 【思维】Luogu P3941 入阵曲
题目大意 洛谷链接 给出一个矩阵和 \(K\) ,问有多少子矩阵中的元素和能整除 \(K\). 数据范围 \(2\leq n,m\leq 400\),\(0\leq K\leq 10^6\). 思路 ...
- 洛谷P3941入阵曲
题目传送门 这道题也是今年湖南集训队Day8的第一题,昨天洛谷的公开赛上又考了一遍,来发个记录(其实是因为五月天,另外两道题分别是将军令和星空,出这次题目的人肯定同为五迷(✪㉨✪)) 话不多说.先理解 ...
- P3941 入阵曲
\(\color{#0066ff}{ 题目描述 }\) 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时候,觉得整 ...
- [洛谷P3941] 入阵曲
题目背景 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 入阵曲 题解在代码里. #include<iostream> #include<cstdio> #include& ...
- 落谷P3941 入阵曲
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...
- [洛谷P3941]:入阵曲(前缀和+桶)
题目传送门 题目背景 丹青千秋酿,一醉解愁肠.无悔少年枉,只愿壮志狂. 题目描述 小$F$很喜欢数学,但是到了高中以后数学总是考不好.有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识 ...
- 题解 P3941 入阵曲
题解 观察数据范围,可以 \(\mathcal O(n^2m^2)\) 暴力计算,而加上特殊性质,则可以骗到 \(75pts\) 正解: 我们发现,在一维情况下,\(\mod k\) 相同的前缀和相减 ...
随机推荐
- 项目管理系列--从零开始Code Review[转]
从零开始Code Review 这篇帖子不是通篇介绍Code Review的方法论, 而是前大段记录了我们团队怎么从没有这个习惯到每天都进行review的过程, 后小段给出了我的一些建议. 希望能对诸 ...
- js事件绑定简单写法
$E.on = function (o, e, f) { return o.addEventListener ? o.addEventListener(e, f, false) : o.attachE ...
- JavaScript中变量声明以及数据类型
JavaScript变量 变量名必须以字母或下划线("_")开头 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做) 变量名称对大小写敏感(y 和 Y 是不同的变量) 变量可 ...
- js实现栈
栈是一种先进后出的特殊线性表结构,存储上分链式存储和顺序存储两种方式 链式存储: function LinkedStack() { let Node = function (ele) { this.e ...
- IntelliJ IDEA 安装配置
之前一直用的eclipse,以前公司的老大推荐过用这个,但是由于项目都比较赶,没及时学习. 后面这个公司的同时都用的idea,所以就换了 其实并没有那么难主要是刚刚切换时候快捷键不熟悉,打包什么的,有 ...
- VirtualBox虚拟机Centos7网络配置
Centos7要实现虚拟机可以链接网络,主机与虚拟机可以互相通过ip地址访问,需要配置两种网卡,两张网卡配置不同的网络链接方式 virtualBox 网络链接讲解地址:https://www.cnbl ...
- C Primer Plus 读后感
<C Primer Plus>中文版 第六版 从网站上搜索到这本书适合初学者而且是自学者可以看的C语言书籍,于是上网买了一本. 真是物有所值,通过本书我很系统的学习了一遍C语言,书中代码很 ...
- 使用powershell 执行脚本,windows默认不允许任何脚本运行
使用如下命令让PowerShell运行在无限制的环境之下: Set-ExecutionPolicy Unrestricted
- websocket 和 dwr 做web端即时通信
一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) 首先HTTP有1.1和1.0之说,也就是所谓的k ...
- cf1037E. Trips(图论 set)
题意 题目链接 Sol 倒着考虑!倒着考虑!倒着考虑! 显然,一个能成为答案的子图一定满足,其中任意节点的度数\(>= k\) 那么倒着维护就只用考虑删除操作,如果一个点不合法的话就把它删掉,然 ...