首页 > 明日DISCO
头像 Lambda_L
发表于 2026-01-07 00:56:21
思路因为边界永远是 0,而且不能改,所以最终所有数相等的话,只可能等于 0。所以问题转化为:能不能把所有 数变成 0。如果当前是负数,且四个邻居都 >= 0,它可以一直增加到 0如果当前为正数,同理;最后检查是否全为0就行了代码 #include<bits/stdc++.h> us 展开全文
头像 kilomatutinal
发表于 2026-01-07 01:34:53
喵~主人想让我来解释这个喵!(歪头)你想象一下呐,这个棋盘就像一片有很多小土堆和小坑坑的沙滩喵~边界那一圈都是平平的(都是0哦)。我们现在要做的事情,就是把沙滩弄得平平的(全部变成0),就可以舒服地躺在上面晒太阳啦喵~规则很简单呢喵!如果有个小土堆比周围四个地方都高(就像猫猫堆的小沙堆),就可以把它 展开全文
头像 TimothyStarman
发表于 2026-01-07 01:37:29
思路 设棋盘二维数组 arr[i][j] 对于 ,有 使得 ,那么就代表可行。那么有以下贪心策略成立: 数组 时,continue;。 数组 且四个方向均小于 0,那么 可以降为 0,否则不做处理。 数组 且四个方向均大于 0,那么 可以升为 0,否则不做处理。 最后判断每一个 展开全文
头像 Jakeap
发表于 2026-01-07 10:24:48
思路:这题你要发现题目的漏洞,保证所有的数都相等,那么处于0和处于n+1位置的所有数一直是0(也就是棋盘边上的一圈位置一直是0),因为其不能被调整。那么就转换为了将所有数都按照规则转换全部都转换为0即可。要求是比周围都大可以减一,比周围都小加一,但是如果两个相邻数都是正数,那么变换到最后最多就是相等 展开全文
头像 Vie_SQ
发表于 2026-01-07 10:38:23
//最后一定全变成0,每两个直接相邻的数一定只能变成他俩中间的数,所以每两个相邻的数 组成的区间必须包含0. //满足该条件后,每个数字必定可以增加或减少变成0.并且与操作顺序无关,必定能操作。 #include <iostream> #include <vector> 展开全文
头像 quchen666
发表于 2026-01-07 12:17:15
#include <bits/stdc++.h> using namespace std; const int N = 1e3+10; int a[N][N]; int dir[4][2]={1,0,-1,0,0,-1,0,1}; int main() { ios::sync 展开全文
头像 BeauWill
发表于 2026-01-07 00:22:21
对于每个位置,我们都贪心的尝试修改,如果可以修改,就把它修改为四个方向中的最大值和最小值(具体看它满足哪个条件)。其实这里修改后的值不为0,已经可以输出"NO"并return了。这是因为第0,n+1的行和列是不能修改的,要想使整个正方形棋盘的值都相等,只能整个棋盘上的数都为0。而 展开全文
头像 RogeAustine
发表于 2026-01-07 00:34:08
首先这个题我们并不需要真的去修改这个方阵,因为我们注意到边界都是0,那么我们一定要保证所有的元素最后都可以,注意是可以,变成0.那么我们就考虑什么时候一个非0的元素可以变为0,其实就是对于这个元素的四个方向,每个方向的元素与该元素的乘积都要小于等于0就可以,因为如果异号的话,这个元素就有足够大的空间 展开全文
头像 此在Dasein
发表于 2026-01-07 06:35:38
这是一个经典的网格操作与稳定性分析问题。我们可以通过分析操作的性质、状态的单调性以及“死锁”条件来得出一个基于贪心策略或事件驱动模拟的算法。 问题分析 我们需要判断是否可以通过有限次操作将整个网格的所有数值变为 0。 操作规则是:局部最大值可以减小,局部最小值可以增加。这实际上是一个能量最小化或平滑 展开全文
头像 olone
发表于 2026-01-07 10:01:33
#include <iostream> using namespace std; const int N=505; int n; int a[N][N]; int dx[4]={1,0,0,-1}; int dy[4]={0,1,-1,0}; int main() { s 展开全文