题目让O(1)预处理出来 类三角形边界及内部的和

根据这个图 就是一个大矩形-左边的绿色的矩形 - 蓝色的大三角形 + 右上角突出的蓝色的小三角形

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. #define rep(i,l,r) for(int i=l;i<=r;i++)
  5. const ll mod = 1LL<<32;
  6. const int N = 3000+10;
  7. unsigned int A,B,C;
  8. inline unsigned int rng61(){
  9. A ^= A << 16;
  10. A ^= A >> 5;
  11. A ^= A << 1;
  12. unsigned int t = A;
  13. A = B;
  14. B = C;
  15. C ^= t ^ A;
  16. return C;
  17. }
  18.  
  19. ll a[N][N], rect[N][N], tri[N][N];
  20.  
  21. int n, m, q ,x, y, k;
  22. void input()
  23. {
  24. scanf("%d%d%d%u%u%u", &n, &m, &q, &A, &B, &C);
  25. for(int i = 1; i <= n; i++)
  26. for(int j = 1; j <= m; j++)
  27. a[i][j] = rng61();
  28. }
  29. ll pow_mod(ll x,ll n1) {
  30. ll res = 1;
  31. while (n1 > 0) {
  32. if(n1 & 1) res = res*x%mod;
  33. x = x*x%mod;
  34. n1/=2;
  35. }
  36. return res;
  37. }
  38.  
  39. int main () {
  40. freopen("out.txt","w",stdout);
  41. input();
  42. //printf("---rect ---\n");
  43. rep(i,1,n) {
  44. rep(j,1,m) {
  45. rect[i][j] = rect[i-1][j] + rect[i][j-1] - rect[i-1][j-1] + a[i][j];
  46. //printf("%10lld ",rect[i][j]);
  47. }
  48. //puts("");
  49. }
  50. //printf("---rect ---\n");
  51. //printf("---tri ---\n");
  52. rep(i,1,n) {
  53. for(int j=m;j>=1;j--) {
  54. tri[i][j] = tri[i-1][j] + tri[i-1][j+1] - tri[i-2][j+1] + a[i][j];
  55. //printf("%10lld ",tri[i][j]);
  56. }
  57. //puts("");
  58. }
  59. //printf("---tri ---\n");
  60. ll res = 0;
  61. for(int i=1;i<=q;i++) {
  62. x = rng61() % n + 1;
  63. y = rng61() % m + 1;
  64. k = rng61() % min(x, y) + 1;
  65. ll ans = rect[x][y] - rect[x][y-k] - tri[x-1][y-k+1] + tri[x-k-1][y+1];
  66. res = res*233%mod + ans %mod;
  67. res %=mod;
  68. }
  69. cout << res <<endl;
  70. return 0;
  71. }

  

【bzoj4972】小Q的方格纸 前缀和的更多相关文章

  1. BZOJ4972 小Q的方格纸

    每个格子记录其左下的45°直角梯形区域的和及左下矩形区域的和即可. #include<iostream> #include<cstdio> #include<cmath& ...

  2. BZOJ4972 八月月赛 Problem B 小Q的方格纸 二维前缀和

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4972 八月月赛Problem B 题目概括 一个矩阵,一坨询问,问矩阵中一个特定方向的等腰直角三角 ...

  3. ZJNU 2345 - 小Y的方格纸

    明显,总共有n*m格,已经涂了k格 所以剩下n*m-k格 如果n*m-k<=k,即k已经占用了大于等于一半的格子,显然答案为0 否则 剩下的格子中取k+1,k+2...n*m-k格均可 取组合数 ...

  4. bzoj 4815: [Cqoi2017]小Q的表格 [数论]

    4815: [Cqoi2017]小Q的表格 题意: 单点修改,查询前缀正方形和.修改后要求满足条件f(a,b)=f(b,a), b×f(a,a+b)=(a+b)*f(a,b) 一开始sb了认为一次只会 ...

  5. [bzoj4815]: [Cqoi2017]小Q的表格

    来自FallDream的博客,未经允许,请勿转载,谢谢. 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理.每当小Q不知道如何解决时,就只好向你求助. ...

  6. 【CQOI2017】小Q的表格

    [CQOI2017]小Q的表格 稍加推导就会发现\(f(a,b)=a\cdot b\cdot h(gcd(a,b))\). 初始时\(h(n)=1\). 询问前\(k\)行\(k\)列时我们就反演: ...

  7. 【BZOJ4815】[CQOI2017]小Q的表格(莫比乌斯反演,分块)

    [BZOJ4815][CQOI2017]小Q的表格(莫比乌斯反演,分块) 题面 BZOJ 洛谷 题解 神仙题啊. 首先\(f(a,b)=f(b,a)\)告诉我们矩阵只要算一半就好了. 接下来是\(b* ...

  8. 洛咕 P3700 [CQOI2017]小Q的表格

    洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...

  9. bzoj4815[CQOI2017]小Q的格子

    题意 不简述题意了,简述题意之后这道题就做出来了.放个原题面. 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理. 每当小Q不知道如何解决时,就只好向 ...

随机推荐

  1. DNS、链接网页、资源预加载处理

    从网页性能的角度来看,DNS的解析时间是比较耗时的.因此如果能预先下载网页中用到的其它域的资源.可提前进行DNS解析: <link rel="dns-prefetch" hr ...

  2. Ubuntu 如何更改用户密码

    你需要为第一个帐户创建一个密码.这可以用 passwd 命令来完成. 系统会提示输入你的旧密码一次,输入你的新密码两次.用 root 用户更改用户 paul 的密码[root@bigboy root] ...

  3. 【BZOJ3727】PA2014 Final Zadanie 树形DP

    [BZOJ3727]PA2014 Final Zadanie Description 吉丽YY了一道神题,题面是这样的:“一棵n个点的树,每条边长度为1,第i个结点居住着a[i]个人.假设在i结点举行 ...

  4. [C/C++] String Reverse 字符串 反转

    #include <iostream> #include <string> #include <algorithm> #include <cstring> ...

  5. wampserver3 集成环境 启动Apache失败

    前提:安装完成后,原先是能够启动服务,但是按照网上教程修改conf文件后就不能启动Apache, 方法: 1.查看Apache错误日志(无奈的是看不懂) 2.在cmd命令行中查看,(打开cmd,输入: ...

  6. react路由守卫

    react没有vue那样的路由钩子beforeEach,实现登陆验证. 实现效果:如果没有登陆,就跳转到登陆界面,如果登陆过浏览器存有登陆信息就跳转到所输入的路由界面,如果该路由不存在则跳到404页面 ...

  7. [Gradle] 发布构件到本地仓库

    配置 需要发布构件的模块 build.gradle 加入如下配置 apply plugin: 'maven-publish' publishing { publications { mavenJava ...

  8. 沈阳网络赛F-Fantastic Graph【贪心】or【网络流】

    "Oh, There is a bipartite graph.""Make it Fantastic." X wants to check whether a ...

  9. opencv学习笔记——cv::line函数详解

    void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8, ...

  10. JavaCSV之写CSV文件

    与JavaCSV读CSV文件相对应,JavaCSV也可以用来写数据到CSV文件中. 1.准备工作 (1)第三方包库下载地址:https://sourceforge.net/projects/javac ...