点击这里更换您喜欢的皮肤wtboj 首页
请点击这里登入noios   首页 入门 c++讲义 入门教程视频 金牌教程 入门视频 站务 公告 | 题库 记录 竞测 测试 闯关 作业 排名 团队 讨论 | 换肤 | 登入 注册  
News >>   新增功能:各团队管理员可以发布本团队作业了 ()

From VijosGuest0
方格稿纸
讨论 Discussion
 
答案
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int** grid = new int*[n];
for (int i = 0; i < n; ++i) {
grid[i] = new int[m];
for (int j = 0; j < m; ++j) {
cin >> grid[i][j];
}
}
long long** pre = new long long*[n + 1];
for (int i = 0; i <= n; ++i) {
pre[i] = new long long[m + 1]();
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
pre[i][j] = pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1] + grid[i-1][j-1];
}
}
int res = 0;
int max_k = min(n, m);
for (int k = 2; k <= max_k; ++k) {
for (int i = 0; i <= n - k; ++i) {
for (int j = 0; j <= m - k; ++j) {
int x2 = i + k - 1;
int y2 = j + k - 1;
long long cnt1 = pre[x2+1][y2+1] - pre[i][y2+1] - pre[x2+1][j] + pre[i][j];
long long total = (long long)k * k;
if (abs(2 * cnt1 - total) <= 1) {
res++;
}
}
}
}
cout << res << endl;
for (int i = 0; i < n; ++i) {
delete[] grid[i];
}
delete[] grid;
for (int i = 0; i <= n; ++i) {
delete[] pre[i];
}
delete[] pre;
return 0;
}
( )

此主题无回复显示
发布讨论主题 回复讨论主题
Flag
  
题号
  P1078
  其它
通过
  31人
提交
  129次
通过率
  24%
难度
  2
提交 讨论 题解
 Copyright wtboj © 2005-2006. www.wutuobang.date Powered by wtboj 关于 联系 帮助
 wtboj Information ---- Total Users : 1364 | Online Users / Processes : 0 / 29 | Processed Time : 47 ms | Server Time : 2026/1/1 21:03:41