题目传送门:G - Scalene Triangle Area (atcoder.jp)

题意:

给定大小为N*N的OX矩阵,若矩阵的(s,t)处为O,其覆盖范围为:满足以下条件的所有位置(i,j)

  • s <= i && t <= j

  • (i - s) + (j - t) / 2 < M

再给出Q次询问,对于每次询问(x,y),要求给出对应位置被覆盖了多少次。

思路:imos

不妨先考虑 n = 7, m = 3, 且仅在左上角处为 'O' 。那么矩阵上每个位置被覆盖次数如Table1所示。

于是我们可以在Table2中,+号处+1,-号处-1,再对每行,进行横向累积和。

  • 考虑Table2的+:可以将其进一步化成Table3所示,则进行纵向累积和后,就回到Table2。

  • 考虑Table2的-:可以将其进一步化成Table4所示,对其进行纵向累积和时:del [ i ] [ j ] = del [ i ] [ j ] + del [ i - 1 ] [ j - 2 ],纵向累计和后就回到Table2。

 

一般情况时,也是如此处理,即可得到答案。

复杂度:O(N2 + Q).

 

代码参考:

#include <bits/stdc++.h>
using namespace std; const int N = 2022; int n, m, add[N][5 * N], del[N][5 * N];
char g[N][N]; int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++)
{
scanf("%s", g[i] + 1);
for(int j = 1; j <= n; j++)
if(g[i][j] == 'O')
{
++ add[i][j], -- add[min(i + m, n + 1)][j];
-- del[i][j + 2 * m], ++ del[min(i + m, n + 1)][j];
}
} //纵向累积和
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n + 2 * m; j++) add[i][j] += add[i - 1][j], del[i][j] += del[i - 1][j + 2]; //横向累积和
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++) add[i][j] += add[i][j - 1], del[i][j] += del[i][j - 1]; int Q;
cin >> Q;
while(Q--)
{
int x, y;
scanf("%d%d", &x, &y);
printf("%d\n", add[x][y] + del[x][y]);
} return 0;
}

AtCoder Beginner Contest 260 G // imos(累积和算法)的更多相关文章

  1. AtCoder Beginner Contest 260 (D-E)

    AtCoder Beginner Contest 260 - AtCoder D - Draw Your Cards 题意:N张卡牌数字 1-n,以某种顺序排放,每次拿一张,如果这一张比前面某一张小( ...

  2. AtCoder Beginner Contest 260 F - Find 4-cycle

    题目传送门:F - Find 4-cycle (atcoder.jp) 题意: 给定一个无向图,其包含了S.T两个独立点集(即S.T内部间的任意两点之间不存在边),再给出图中的M条边(S中的点与T中的 ...

  3. AtCoder Beginner Contest 260 E // 双指针 + 差分

    题目传送门:E - At Least One (atcoder.jp) 题意: 给定大小为N的两个数组A,B,求长度分别为1~M的满足以下条件的连续序列数量,条件为: 对于每个i(从1~N),Ai和B ...

  4. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  5. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  6. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  7. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

  8. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  9. AtCoder Beginner Contest 177 题解

    AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...

随机推荐

  1. CentOS开机流程详解

    一个执着于技术的公众号 开机流程 BIOS: (Basic Input Output System)基本输入输出系统,它是一组固化到计算机内主板上一个ROM芯片上的程序,保存着计算机最重要的基本输入输 ...

  2. 浅谈 UNIX、Linux、ios、android 他们之间的关系

    开源Linux 一个执着于技术的公众号 Unix, 简化形成了Linux,Linux则是Android的内核,而苹果则是使用unix系统作为ios和macos的内核. 几个系统出现的时间 UNIX系统 ...

  3. 一个NIH综合症患者的自白

    一个NIH综合症患者的自白 欢迎关注我的博客,️点他即可. NIH: Not Invented Here 当人们看到一款产品或者任何涉及创意的东西时,常常会有一个想法--这是抄的.也就是说它并非原创, ...

  4. MOSFET, MOS管, 开关管笔记

    MOSFET, MOS管, 开关管 MOSFET, Metal-Oxide-Semiconductor Field-Effect Transistor, 金属氧化物半导体场效晶体管 常见封装 电路符号 ...

  5. Spring Boot配置全局异常捕获

    1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...

  6. 论文解读(GCC)《GCC: Graph Contrastive Coding for Graph Neural Network Pre-Training》

    论文信息 论文标题:GCC: Graph Contrastive Coding for Graph Neural Network Pre-Training论文作者:Jiezhong Qiu, Qibi ...

  7. 最强肉坦:RUST多线程

    Rust最近非常火,作为coder要早学早享受.本篇作为该博客第一篇学习Rust语言的文章,将通过一个在其他语言都比较常见的例子作为线索,引出Rust的一些重要理念或者说特性.这些特性都是令人心驰神往 ...

  8. Java - happens-before

    Java - happens-before JSR-133对 happens-before 关系的定义如下: 如果一个操作 happens-before 另一个操作,那么第一个操作的执行结果将对第二个 ...

  9. ConfigurationManager姿势快闪

    C# ConfigurationManager使用记录 最近一个祖传代码是使用.NET Fx写就的,我在使用控制台程序获取配置时有些折腾. 下面记录一些管理配置文件的姿势: Configuration ...

  10. 48. ResNet为什么能训练出1000层的模型

    先回顾一下resnet怎么处理它的梯度消失,使得能处理训练1000层: