ABC347F 题解
我们考虑这三个正方形的相对位置有多少种情况。
我们把正方形的顶点设为 \((x_i,y_i)\)。容易发现,放置合法当且仅当 \(\forall i \neq j, | \ x_i - x_j \ | \geq d \ \text{or} | \ y_i - y_j \ | \geq d\)。
发现这只有可能是以下两种情况。

于是便可以开始写了。
/*******************************
| Author: DE_aemmprty
| Problem: F - Non-overlapping Squares
| Contest: AtCoder - AtCoder Beginner Contest 347
| URL: https://atcoder.jp/contests/abc347/tasks/abc347_f
| When: 2024-03-30 21:12:33
|
| Memory: 1024 MB
| Time: 3000 ms
*******************************/
#include <bits/stdc++.h>
using namespace std;
long long read() {
char c = getchar();
long long x = 0, p = 1;
while ((c < '0' || c > '9') && c != '-') c = getchar();
if (c == '-') p = -1, c = getchar();
while (c >= '0' && c <= '9')
x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * p;
}
const int N = 1007;
int n, m;
long long a[N][N], b[N][N], col[N], row[N];
long long colmx[N][2], rowmx[N][2];
long long c[N][N][4];
void solve() {
n = read(), m = read();
for (int i = 1; i <= n; i ++) for (int j = 1; j <= n; j ++)
a[i][j] = read(), a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
for (int i = 1; i <= n - m + 1; i ++)
for (int j = 1; j <= n - m + 1; j ++) {
b[i][j] = a[i + m - 1][j + m - 1];
b[i][j] -= a[i - 1][j + m - 1] + a[i + m - 1][j - 1];
b[i][j] += a[i - 1][j - 1];
col[j] = max(col[j], b[i][j]);
row[i] = max(row[i], b[i][j]);
}
for (int i = 1; i <= n - m + 1; i ++) {
colmx[i][0] = max(colmx[i - 1][0], col[i]);
rowmx[i][0] = max(rowmx[i - 1][0], row[i]);
}
for (int i = n - m + 1; i >= 1; i --) {
colmx[i][1] = max(colmx[i + 1][1], col[i]);
rowmx[i][1] = max(rowmx[i + 1][1], row[i]);
}
for (int i = 1; i <= n - m + 1; i ++) for (int j = 1; j <= n - m + 1; j ++)
c[i][j][0] = max(max(c[i - 1][j][0], c[i][j - 1][0]), b[i][j]);
for (int i = n - m + 1; i; i --) for (int j = 1; j <= n - m + 1; j ++)
c[i][j][1] = max(max(c[i + 1][j][1], c[i][j - 1][1]), b[i][j]);
for (int i = 1; i <= n - m + 1; i ++) for (int j = n - m + 1; j; j --)
c[i][j][2] = max(max(c[i - 1][j][2], c[i][j + 1][2]), b[i][j]);
for (int i = n - m + 1; i; i --) for (int j = n - m + 1; j; j --)
c[i][j][3] = max(max(c[i + 1][j][3], c[i][j + 1][3]), b[i][j]);
long long ans = -2e9;
for (int i = m + 1; i < n - m + 1; i ++) {
long long mx1 = -2e9, mx2 = -2e9;
for (int j = i + m - 1; j < n; j ++) {
mx1 = max(mx1, col[j - m + 1]);
mx2 = max(mx2, row[j - m + 1]);
ans = max(ans, colmx[i - m][0] + mx1 + colmx[j + 1][1]);
ans = max(ans, rowmx[i - m][0] + mx2 + rowmx[j + 1][1]);
}
}
for (int i = n - m + 1; i > m; i --) for (int j = m + 1; j <= n - m + 1; j ++) {
ans = max(ans, rowmx[i][1] + c[i - m][j - m][0] + c[i - m][j][2]);
ans = max(ans, colmx[i][1] + c[j - m][i - m][0] + c[j][i - m][1]);
}
for (int i = m; i < n - m + 1; i ++) for (int j = m + 1; j <= n - m + 1; j ++) {
ans = max(ans, rowmx[i - m + 1][0] + c[i + 1][j - m][1] + c[i + 1][j][3]);
ans = max(ans, colmx[i - m + 1][0] + c[j - m][i + 1][2] + c[j][i + 1][3]);
}
cout << ans;
}
signed main() {
int t = 1;
while (t --) solve();
return 0;
}
ABC347F 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- 仿EXCEL插件,智表ZCELL产品V1.9 版本发布,增加导入、导出EXCEL功能
详细请移步 智表(ZCELL)官网www.zcell.net 更新说明 这次更新主要应用户要求,主要增加了导入.导出EXCEL文件功能,并增加了获取单元格公式.显示值等功能,欢迎大家体验使用. 本次 ...
- TypeScript实用技巧大杂烩,助你成为真正的全栈工程师
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 深入理解微服务架构:银弹 or 焦油坑?
极客时间:<从 0 开始学架构>:深入理解微服务架构:银弹 or 焦油坑? 微服务与 SOA 的关系 SOA和微服务的关系和区别,可分为以下几种典型的观点: 微服务是 SOA 的实现方式 ...
- AI 极客低代码平台快速上手 --生成Python代码
1.侧栏菜单选择"Python": 点击代码区右上角的"代码魔法棒"图标,在弹出的确认面板中点击"确认"按钮,一秒生成基于FastApi最新 ...
- CVE-2021-41773 && CVE-2021-42013拆解复现
CVE-2021-41773 && CVE-2021-42013 参考了这个师傅的WP https://www.jianshu.com/p/3076d9ec68cf CVE-2021- ...
- Linux如何进入bios
如何通过Linux系统进入bios 我们都知道在系统没启动前用按键进入bios,但是如果在启动没启动之前按键失效(bios里面设置的原因). 如果能进入linux系统,那么可以执行 sudo syst ...
- L1-7、Prompt 的“调试技巧”
️ 一份 Prompt 没效果?不要急,调试它! 为什么要"调试 Prompt"? 就像写代码有 bug,Prompt 也可能"指令不清".当模型输出不理想时, ...
- Django Web应用开发实战第二章
一.基本配置信息 """ Django settings for myblog project. Generated by 'django-admin startproj ...
- 手摸手教你从生成CRD到编写自定义控制器
介绍 我们可以使用code-generator 以及controller-tools来进行代码自动生成,通过代码自动生成可以帮我们自动生成 CRD 资源对象,以及客户端访问的 ClientSet.In ...
- python爬虫学习——urllib库
#获取一个get请求 #import urllib.request # response = urllib.request.urlopen("http://www.baidu.com&quo ...