洛谷P3941入阵曲
这道题也是今年湖南集训队Day8的第一题,昨天洛谷的公开赛上又考了一遍,来发个记录(其实是因为五月天,另外两道题分别是将军令和星空,出这次题目的人肯定同为五迷(✪㉨✪))
话不多说。先理解下题意,给定一个n*m的矩阵,要求出能被k整除的子矩阵个数。
题意很简单,但是矩阵这方面的题目一直是我最大的软肋,所以昨天做的时候就直接交了个O( n^2 m^2 )的暴力,然后运气还可以,水了60分(据说暴力只有55?)然后在网上看到某集训队大犇的解题报告,搞懂了这题的正解做法。
那位大犇的做法是O( n^2 m )的,用读优可以卡过去,虽然我也想能不能还优化一下,但是无奈蒟蒻怎能比肩大犇QAQ
为了优化时间复杂度,在读入的时候就用一个二维数组记录下前缀和(用融斥原理),之后n^2枚举纵列起点和终点,然后枚举横列,用两个数组计数,当然其中也还有一些非常玄学的做法,具体还是看代码吧,在代码里解释:
#include<bits/stdc++.h>
#define ll long long//切记要开long long;
#define maxn 405
using namespace std;
ll n,m,mod,a[maxn][maxn];
ll sum[maxn][maxn],ans;
ll b[maxn],cnt[];
inline ll read()
{
char ch=getchar();ll num=;bool flag=false;
while(ch<''||ch>''){if(ch=='-')flag=true;ch=getchar();}
//这里要注意要用while,一开始我用if被卡了四个点,非常玄学,可能是输入数据有毒;
while(ch>=''&&ch<=''){num=num*+ch-'';ch=getchar();}
return flag?-num:num;
}
int main()
{
//freopen("water.in","r",stdin);
n=read();m=read();mod=read();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
a[i][j]=read();
sum[i][j]=(sum[i-][j]+sum[i][j-]-sum[i-][j-]+a[i][j]);
if(sum[i][j]>=mod)sum[i][j]-=mod;}
//这里是一个小技巧,当sum已经大于mod时直接减去,可以缩小操作时的数据范围,对结果不影响,可以达到优化的效果;
for(int i=;i<n;++i){
for(int j=i+;j<=n;++j){
cnt[]=;//别忘了初始化;
for(int k=;k<=m;++k){
b[k]=(sum[j][k]-sum[i][k])%mod;
//这里自己好好理解下,为什么这么做可行;
if(b[k]<)b[k]+=mod;
ans+=cnt[b[k]];
++cnt[b[k]];
}
for(int k=;k<=m;++k)cnt[b[k]]=;
//每次做完以后还原数组;
}
}
printf("%lld\n",ans);
return ;
}
最后再放上炒鸡好听的入阵曲~~为我五团疯狂打call!!!!!
洛谷P3941入阵曲的更多相关文章
- [洛谷P3941] 入阵曲
题目背景 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 入阵曲 题解在代码里. #include<iostream> #include<cstdio> #include& ...
- [洛谷P3941]:入阵曲(前缀和+桶)
题目传送门 题目背景 丹青千秋酿,一醉解愁肠.无悔少年枉,只愿壮志狂. 题目描述 小$F$很喜欢数学,但是到了高中以后数学总是考不好.有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识 ...
- 落谷P3941 入阵曲
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
随机推荐
- cas 服务端、客服端详细配置
一.准备 1.下载官方源码 CAS-Server下载地址:https://www.apereo.org/projects/cas/download-cas CAS-Client下载地址:http:// ...
- elk相关
curl http://localhost:9200/_aliases?pretty=1 #列出elk中所有索引
- 【vijos】P1066 弱弱的战壕
[算法]线段树 [题解]将所有坐标按x(第一)和y(第二)从小到大排序,再按顺序插入线段树,即在线段树中将y坐标位置+1,这样就能保证每个坐标能包含的点一定先被处理了,每次询问查询1...a[i].y ...
- HDU 1234 开门人和关门人 (模拟)
题目链接 Problem Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人. Input ...
- hdfs基本思想
1.hdfs的优缺点 (1)不适合大量小文件存储: (2)不适合并发写入,不支持文件随机修改:(只能append追加) (3)不支持随机读等低延时的访问方式 2.基本思想 主从结构 主节点, name ...
- Git常规配置与基本用法
Git环境配置 一. 全局配置 1. 配置文件 git全局配置文件.gitconfig默认在当前系统用户文件夹下,window可运行%USERPROFILE%查找,Mac系统在cd ~查找. 具体配置 ...
- DIV+CSS综合实例【传智PHP首页】
1.首页结构 2.准备工作 所有素材放到与当前网页同级的目录下: 网页背景色.背景图: 主页宽度:1000px: 创建CSS文件,将CSS文件引入到当前的HTML文件中. 3.实现 效果图: HTML ...
- 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6154 CaoHaha's staff 思维
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154 题意:在笛卡尔坐标系下,画一个面积至少为 n 的简单多边形,每次只能画一条边或者一个格子的对角 ...
- yml格式
是什么? yml文件扩展名是YAML的缩写,YAML于2001年出现,是一种数据描述语言,和xml类似 为什么用它? 我们在做javaweb项目的时候最常见的就是.xml配置文件和properitie ...
- SRM 563 Div1 500 SpellCards
Description 有n张符卡排成一个队列,每张符卡有两个属性,等级lili和伤害didi. 你可以做任意次操作,每次操作为以下二者之一: 把队首的符卡移动到队尾. 使用队首的符卡,对敌人造成di ...