-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1895. Largest Magic Square.cpp
89 lines (83 loc) · 2.37 KB
/
1895. Largest Magic Square.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <vector>
#include <algorithm>
using namespace std;
class Solution
{
public:
int largestMagicSquare(vector<vector<int>> &grid)
{
int rsz = grid.size(), csz = grid[0].size();
rp = vector<vector<int>>(rsz, vector<int>(csz, 0));
for (int i = 0; i < rsz; i++)
{
int sum = 0;
for (int j = 0; j < csz; j++)
{
sum += grid[i][j];
rp[i][j] = sum;
}
}
cp = vector<vector<int>>(rsz, vector<int>(csz, 0));
for (int i = 0; i < csz; i++)
{
int sum = 0;
for (int j = 0; j < rsz; j++)
{
sum += grid[j][i];
cp[j][i] = sum;
}
}
dp = vector<vector<int>>(rsz, vector<int>(csz, 0));
for (int col = 0; col < csz; col++)
{
int sum = 0, j = col, step = 0;
for (int i = 0; i < rsz && j < csz; i++, j++)
{
sum += grid[i][j];
dp[i][j] = sum;
if (col == 0 && (i == rsz - 1 || j == csz - 1))
{
i = ++step - 1;
j = col - 1;
continue;
}
}
}
adp = vector<vector<int>>(rsz, vector<int>(csz, 0));
for (int col = csz - 1; col >= 0; col--)
{
int sum = 0, j = col, step = 0;
for (int i = 0; i < rsz && j >= 0; i++, j--)
{
sum += grid[i][j];
adp[i][j] = sum;
if (col == csz - 1 && (i == rsz - 1 || j == 0))
{
i = ++step - 1;
j = col + 1;
continue;
}
}
}
int r = 0;
for (int i = 1; i <= rsz; i++)
{
for (int j = 1; j <= csz; j++)
{
for (int k = min(rsz - i, csz - j); k > r; --k)
{
int sum = dp[i + k - 1][j + k - 1] - dp[i - 1][j - 1];
bool eq = sum == adp[i + k - 1][j -1] - adp[i - 1][j + k - 1];
if(eq){
for()
}
}
}
}
}
private:
vector<vector<int>> &rp;
vector<vector<int>> &cp;
vector<vector<int>> &dp;
vector<vector<int>> &adp;
};