6336.Problem E. Matrix from Arrays

不想解释了,直接官方题解:

队友写了博客,我是水的他的代码

------>HDU 6336 子矩阵求和

至于为什么是4倍的,因为这个矩阵是左上半边有数,所以开4倍才能保证求的矩阵区域里面有数,就是图上的红色阴影部分,蓝色为待求解矩阵。

其他的就是容斥原理用一下,其他的就没什么了。

代码:

  1. //1005-6336-矩阵求和-二维前缀和+容斥-预处理O(1)查询输出
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<algorithm>
  6. #include<bitset>
  7. #include<cassert>
  8. #include<cctype>
  9. #include<cmath>
  10. #include<cstdlib>
  11. #include<ctime>
  12. #include<deque>
  13. #include<iomanip>
  14. #include<list>
  15. #include<map>
  16. #include<queue>
  17. #include<set>
  18. #include<stack>
  19. #include<vector>
  20. using namespace std;
  21. typedef long long ll;
  22.  
  23. const double PI=acos(-1.0);
  24. const double eps=1e-;
  25. const ll mod=1e9+;
  26. const int inf=0x3f3f3f3f;
  27. const int maxn=+;
  28. #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
  29.  
  30. ll n,a[maxn],sum[maxn][maxn];
  31.  
  32. void init()
  33. {
  34. int cnt=;
  35. for(int i=;i<*n;++i){
  36. for(int j=;j<=i;++j){
  37. sum[j][i-j]=a[cnt];
  38. cnt=(cnt+)%n;
  39. }
  40. }
  41. for(int i=;i<*n;i++){
  42. for(int j=;j<*n;j++){
  43. if(i> &&j> ) sum[i][j]+=sum[i-][j]+sum[i][j-]-sum[i-][j-];
  44. if(i==&&j> ) sum[i][j]+=sum[i][j-];
  45. if(i> &&j==) sum[i][j]+=sum[i-][j];
  46. }
  47. }
  48. }
  49.  
  50. ll GetAns(int x,int y)
  51. {
  52. ll ans=;
  53. ans+=(x/n)*(y/n)*sum[n-][n-];
  54. ans+=(y/n)*sum[x%n][n-];
  55. ans+=(x/n)*sum[n-][y%n];
  56. ans+=sum[x%n][y%n];
  57. return ans;
  58. }
  59.  
  60. int main()
  61. {
  62. int t;scanf("%d",&t);
  63. while(t--){
  64. scanf("%lld",&n);
  65. for(int i=;i<n;i++)
  66. scanf("%lld",&a[i]);
  67. init();
  68. n=n*;
  69. int m;scanf("%d",&m);
  70. for(int i=;i<m;i++){
  71. int x1,y1,x2,y2;
  72. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  73. ll ans=GetAns(x2,y2)-GetAns(x1-,y2)-GetAns(x2,y1-)+GetAns(x1-,y1-);//容斥
  74. printf("%lld\n",ans);
  75. }
  76. }
  77. }

溜了。

HDU 6336.Problem E. Matrix from Arrays-子矩阵求和+规律+二维前缀和 (2018 Multi-University Training Contest 4 1005)的更多相关文章

  1. 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...

  2. HDU - 6336 Problem E. Matrix from Arrays (规律+二维前缀和)

    题意: for (int i = 0; ; ++i) { for (int j = 0; j <= i; ++j) { M[j][i - j] = A[cursor]; cursor = (cu ...

  3. 最大子矩阵hdu1559(二维前缀和)

    最大子矩阵hdu1559 Problem Description 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大. Input 输入数据的第一行为一个正整数T,表示有 ...

  4. hdu多校第4场E. Matrix from Arrays HDU 二维前缀和

    Problem E. Matrix from Arrays Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total S ...

  5. 杭电第四场 hdu6336 Problem E. Matrix from Arrays 打表找规律 矩阵前缀和(模板)

    Problem E. Matrix from Arrays Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 ...

  6. openjudge1768 最大子矩阵[二维前缀和or递推|DP]

    总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...

  7. HDU 1160 FatMouse's Speed(要记录路径的二维LIS)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. BestCoder Round #56 1002 Clarke and problem 1003 Clarke and puzzle (dp,二维bit或线段树)

    今天第二次做BC,不习惯hdu的oj,CE过2次... 1002 Clarke and problem 和Codeforces Round #319 (Div. 2) B Modulo Sum思路差不 ...

  9. hdu 4939 2014 Multi-University Training Contest 7 1005

    Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

随机推荐

  1. kali linux下的常用bash命令

    虚拟机版本默认用户root 密码toor ls:显示当前目录包含的文件及文件夹 ls -l:以常规格式显示当前目录包含的文件及文件夹(开头字母解释:d:目录 -:文件 c:设备文件 l:链接 b:块设 ...

  2. C#中多态

    我的理解是:通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态. 1: OverRide 实现多态 public class Animal { public virtual void ...

  3. Luogu3960 NOIP2017列队(splay/线段树)

    令splay中的一个点表示一段区间,需要使用其中某个点时将区间分裂即可,剩下的都是splay的基本操作了.写的非常丑陋,注意细节.感觉考场上肯定只能靠部分分苟活了.想起来去年因为各种莫名其妙的原因50 ...

  4. P4754 True Vegetable

    题目描述 小A现在有 NN 道题,编号为 1,2,\cdots,N1,2,⋯,N .每道题的起始毒瘤程度为 00 或 11 .在每回合,小A可以将编号连续的 KK 道题的毒瘤程度+1.但小B因为本身比 ...

  5. 【题解】ZJOI2008骑士

    树型打牌:洛谷P2607 这道题目一开始没有想到解法,只是想到没有上司的舞会,觉得十分的类似呀. 之后发现:n个点,n条边,只要删去一条边,就变成了和上题一模一样的做法. 那么考虑删去的这条边,实际上 ...

  6. BZOJ 题解continue

    1041 圆上的整点 暴力枚举 会超时 这道题很像之前一次noip模拟题(当时的我还太水了(虽然现在也很水)) x2+y2=R2 考虑变型 x2=(R+y)(R-y) int d=gcd(R,y) i ...

  7. 关于连通性问题的Tarjan算法暂结

    关于基础知识的预备桥和割点.双联通分量.强连通分量,支配树.(并不会支配树) 关于有向图的Tarjan,是在熟悉不过的了,它的主要功能就是求强联通分量,缩个点,但是要注意一下构建新图的时候有可能出现重 ...

  8. [HNOI2003]消防局的设立 (贪心)

    [HNOI2003]消防局的设立 题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达, ...

  9. [lucene系列笔记3]用socket把lucene做成一个web服务

    上一篇介绍了用lucene建立索引和搜索,但是那些都只是在本机上运行的,如果希望在服务器上做成web服务该怎么办呢? 一个有效的方法就是用socket通信,这样可以实现后端与前端的独立,也就是不管前端 ...

  10. istringstream()函数的用法

    istringstream()函数的用法 头文件:#include 功能:将一个含有多个空格的字符串分割开来 eg: