답안 #245914

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
245914 2020-07-07T18:48:09 Z RealSuperman1 Maxcomp (info1cup18_maxcomp) C++17
0 / 100
5 ms 384 KB
// #pragma comment(linker, "\stack:200000000")
// #pragma GCC optimize("Ofast")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcount,abm,mmx,avx,avx2,tune=native")
//#pragma GCC target("avx,avx2")
// #pragma GCC target("avx,avx2,fma")
// #pragma GCC optimization("O3")
// #pragma GCC optimization("unroll-loops")


#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define pb push_back
#define fi first
#define se second
#define pii pair<int, int>
#define pll pair<ll, ll>

using namespace std;
using namespace __gnu_pbds;

typedef
tree<
	ll,
	null_type,
	less_equal<ll>,
	rb_tree_tag,
	tree_order_statistics_node_update>
	ordered_set;
	

const int N = 1e3 + 10;
const int mod = 1e9 + 7;
const ll INF = 1e16;
const int lim = 450;


int n, m, a[N][N], more1[N][N], less1[N][N];


int main() {
// 	ios_base::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL);
// 	freopen("input.txt", "r", stdin);
// 	freopen("input.in", "r", stdin);
// 	freopen("input.out", "w", stdout);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> a[i][j];
    int ans = -1;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++) {
            more1[i][j] = a[i][j] + i + j;
            if (i != 1)
                more1[i][j] = max(more1[i][j], more1[i - 1][j]);
            if (j != 1)
                more1[i][j] = max(more1[i][j], more1[i][j - 1]);
                
            less1[i][j] = -a[i][j] + i + j;
            if (i != 1)
                less1[i][j] = max(less1[i][j], less1[i - 1][j]);
            if (j != 1)
                less1[i][j] = max(less1[i][j], less1[i][j - 1]);
            ans = max(ans, a[i][j] + less1[i][j] - i - j - 1);
            // cout << i << " " << j << " " << ans << endl;
            ans = max(ans, -a[i][j] + more1[i][j] - i - j - 1);
            // cout << i << " " << j << " " << ans << endl;
        }
        
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m / 2; j++)
            swap(a[i][j], a[i][n - j + 1]);
    
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++) {
            more1[i][j] = a[i][j] + i + j;
            if (i != 1)
                more1[i][j] = max(more1[i][j], more1[i - 1][j]);
            if (j != 1)
                more1[i][j] = max(more1[i][j], more1[i][j - 1]);
                
            less1[i][j] = -a[i][j] + i + j;
            if (i != 1)
                less1[i][j] = max(less1[i][j], less1[i - 1][j]);
            if (j != 1)
                less1[i][j] = max(less1[i][j], less1[i][j - 1]);
            ans = max(ans, a[i][j] + less1[i][j] - i - j - 1);
            // cout << i << " " << j << " " << ans << endl;
            ans = max(ans, -a[i][j] + more1[i][j] - i - j - 1);
            // cout << i << " " << j << " " << ans << endl;
        }
    cout << ans;
}

# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Incorrect 4 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Incorrect 5 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Incorrect 4 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Incorrect 4 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -