日常奶龙记录
6.13
不小心断更了一个月,彻底颓废...
三维生物被多维数组吓哭
std::unique 返回的是结尾+1,和lb一起用经常搞混
5.17
结构体初始化一定要用构造函数,像
struct seg{
long long lb=-INF,rb=-INF,tot=-INF,sum=-INF;
} tree[N*4];
绝对会炸掉。本地编译贼慢,OJ Nothing is compiled: OUTPUT exceeds. 不清楚原理。在小白逛公园一题中我因抽象结构体初始化浪费 20:52:12 到 21:41:08 的大好光阴,你也快来试试吧。
upd:用wandbox自测,报错 g++: internal compiler error: File size limit exceeded signal terminated program cc1plus 。问了下DeepSeek,似乎是类内初始化会在编译期生成文件时空间爆炸,而构造函数在运行时初始化所以没有这个问题。实测普通构造函数和构造函数初始化列表都编译正常。所以一定要用构造函数啊TAT
5.13
algorithm 库中有 max({}) 欸
5.10
给定一个n*n的二维整数a数组,从起始坐标sx,sy出发行走m次(每次行走为走到当前格的上下左右格),求经过格子中数总和的最大值(重复经过算一次)。
走之前可以进行至多一次操作,将一个任意大小的正方形区域顺时针或逆时针旋转90度。
输入要求:
第一行四个整数n,m,sx,sy
接下来n行,每行n个整数,代表a[i]行
输出要求:
一个整数,代表经过格子中数总和的最大值。
2<=n<=1000,1<=m<=5
首先注意到m很小,所以尽管理论上它np但我们假装它不np。
shumu大佬思路:
因为 \(m \ge 5\),先枚举所有至多 \(4^m\) 条路径,再枚举 \(O(n^2)\) 个旋转中心;对固定中心,路径涉及的格子数是常数,只需按这些格子到中心的距离枚举关键正方形半径并计算顺/逆时针旋转后的路径权值,所以总时间复杂度为 \(O(4^m·m^2⋅n^2)\).
理解:关键半径即每个路径格子到中心的切比雪夫距离(好高端的名字a),因为如果路径更大也不影响,旋转得到的新值不变,就把枚举 \(n\) 次半径优化到 \(m\) 了。
@zmdayo 真的假的???
补充一点,旋转最多用一次
话说旋转无限次的话满足什么条件是不是只需要找网格前 \(m+1\) 大的值总和就行?那样或许能诈骗。

浙公网安备 33010602011771号