【题目链接】:http://hihocoder.com/contest/hiho146/problem/1

【题意】

【题解】



设s[i][j]表示左上角的坐标为(i,j)的n*m的矩阵的和;

有s[i][j]=s[i-1][j-1]+n*m;

不信自己看;

而且

对于i>=max(n,m)

s[i][j]=s[i+1][j];

对于j>=max(n,m)

s[i][j]=s[i][j+1];

而每一行从左到右的元素和;

每一列从上刀下的元素的和是有规律的;

就是前x个数是等差,后面全都相等;

然后根据这个

我们只要算出

s[1][1..max(n,m)]

和s[1..max(n,m)][1]

然后算出这2*max(n,m)个对角线上的各个位置作为左上角的矩阵的和就好;

当然不能强算了;

根据

s[i][j]=s[i-1][j-1]+n*m;

我们知道

s[i][j]之后;

相当于要求最小的x

使得

(s[i][j]+x*n*m%k)==0

这里我们可以预处理出最小的使得x*n*m%k==t的x;

记录下每个t对应的x就好;(当然有一些t可能没办法得到);

这样根据s[1][1..max(n,m)]和s[1..max(n,m)][1]算出每个对角线上有没有可能有有符合要求的点;

每次往下走的时候只会改变一行或一列的和;

所以可以做到O(1)算出来;



【Number Of WA】



17



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 110;
const int K = 1e6+100; int n,m,k,need[K],px,py; void pre()
{
ms(need,-1);
LL now = 0;int x = 0;
while (need[now]==-1)
{
need[now] = x;
now = (now+1LL*n*m)%k;
x++;
}
} int get_sum(int idx,int len)
{
if (len<=idx)
return (1LL*(1+len)*len/2)%k;
else
return (1LL*(1+idx)*idx/2 + 1LL*(len-idx)*idx)%k;
} void gengxin(int x,int y)
{
if (px==-1 && py==-1)
{
px = x,py = y;
return;
}
if (x+y<px+py)
{
px = x,py = y;
}
else
if (x+y==px+py && x<px)
{
px = x,py = y;
}
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false);
int Q;
cin >> Q;
while (Q--)
{
px=-1,py=-1;
cin >> n >> m >> k;
pre();
//左上角n行m列的矩阵和
LL sum = 0,tsum;
rep1(i,1,m)
sum=(sum+get_sum(i,n))%k;//相当于加上第i列的n行元素
tsum = sum;
int ma = max(m,n);
rep1(nowy,1,ma)
{
int t = (k-sum)%k;
if (need[t]!=-1)
gengxin(1+need[t],nowy+need[t]);
sum=(sum-get_sum(nowy,n)+k+get_sum(nowy+m,n))%k;
}
sum = tsum;
rep1(nowx,1,ma)
{
int t = (k-sum)%k;
if (need[t]!=-1)
{
int x = nowx+need[t],y = 1+need[t];
gengxin(x,y);
}
sum=(sum-get_sum(nowx,m)+k+get_sum(nowx+n,m))%k;
}
if (px==-1)
cout <<-1<<endl;
else
cout <<px <<' '<<py<<endl;
}
//printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}

【hiho一下 第146周】子矩阵求和的更多相关文章

  1. 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point

    // 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point // 思路:直接暴力绝对T // 先确定x范围,每个x范围内,离圆心最远的点一定是y轴两端的点.枚举x的范围,再 ...

  2. hiho一下 第115周:网络流一•Ford-Fulkerson算法 (Edmond-Karp,Dinic,SAP)

    来看一道最大流模板水题,借这道题来学习一下最大流的几个算法. 分别用Edmond-Karp,Dinic ,SAP来实现最大流算法. 从运行结过来看明显SAP+当前弧优化+gap优化速度最快.   hi ...

  3. hihoCoder [Offer收割]编程练习赛3 D子矩阵求和

    子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常 ...

  4. 【hiho一下第77周】递归-减而治之 (MS面试题:Koch Snowflake)

    本题是一道微软面试题,看起来复杂,解出来会发现其实是一个很简单的递归问题,但是这道题的递归思路是很值得我们反复推敲的. 原题为hihocoder第77周的题目. 描述 Koch Snowflake i ...

  5. hiho一下 第207周

    题目1 : The Lastest Time 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 What is latest time you can make with ...

  6. hiho一下第130周 后缀自动机二·重复旋律7

    后缀自动机四·重复旋律7 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 神奇的 ...

  7. hiho一下第128周 后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  8. 【hiho一下】第一周 最长回文子串

    题目1:最长回文子串 题目原文:http://hihocoder.com/contest/hiho1/problem/1 [题目解读] 题目与 POJ 3974 palindrome 基本同样.求解最 ...

  9. Solution: 最近公共祖先·一 [hiho一下 第十三周]

    题目1 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中 ...

随机推荐

  1. STM32:SWD下载方式

    最近没事干做了个STM32小板子,芯片是STM32VBT6,下载方式用的SWD,比JTAG节省空间 我用了五根线,3.3V,GND,RESET,SWDIO,SWCLK, JTAG 接口pin map: ...

  2. 基于Hive的手机应用信息统计分析系统

    目录 项目概要 具体实现 HIVE查询 项目概要 需求 手机应用日志 定期离线分析手机应用新增用户.活跃用户.沉默用户.启动次数.版本分布和留存用户等业务指标. 工作流程 手机APP启动时,上报启动日 ...

  3. html5中不再支持的元素

    html5中不再支持的元素:1.acronym(建议abbr) : 定义首字母缩写2.applet(建议object): 定义 applet3.basefont(使用css控制)4.big(使用css ...

  4. [App Store Connect帮助]二、 添加、编辑和删除用户(3)添加和编辑用户

    您可以在“用户和访问”中添加和编辑用户. 如果您以个人名义在“Apple 开发者计划”注册,您可以授权用户访问您 App Store Connect 中的内容.所有用户只拥有 App Store Co ...

  5. String,StringBuffer和StringBuilder

    在执行速度方面的比较:StringBuilder > StringBuffer StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操 ...

  6. 【BZOJ2595_洛谷4294】[WC2008]游览计划(斯坦纳树_状压DP)

    上个月写的题qwq--突然想写篇博客 题目: 洛谷4294 分析: 斯坦纳树模板题. 简单来说,斯坦纳树问题就是给定一张有边权(或点权)的无向图,要求选若干条边使图中一些选定的点连通(可以经过其他点) ...

  7. 337 House Robber III 打家劫舍 III

    小偷又发现一个新的可行窃的地点. 这个地区只有一个入口,称为“根”. 除了根部之外,每栋房子有且只有一个父房子. 一番侦察之后,聪明的小偷意识到“这个地方的所有房屋形成了一棵二叉树”. 如果两个直接相 ...

  8. [转]asp.net MVC 常见安全问题及解决方案

    本文转自:http://www.cnblogs.com/Jessy/p/3539564.html asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request ...

  9. JS——null

    变量被赋值为null,目的往往是为了销毁这个对象: var n1 = 1; n1 = null;

  10. CSS——border

    表格细线: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...