제출 #1181477

#제출 시각아이디문제언어결과실행 시간메모리
1181477zadniprovskaT-Covering (eJOI19_covering)C++20
0 / 100
1095 ms440 KiB
#include <bits/stdc++.h> using namespace std; #define el '\n' #define ll long long #define ld long double #define ull unsigned long long #define pll pair<long long, long long> #define ppll pair< pair<long long, long long>, long long > #define ff first #define ss second #define pb push_back #define pf push_front #define all(x) x.begin(), x.end() const ll DIM = 2e5 + 7; const ll INF = 1e18; const ll mod = 1e9 + 7; const ll maxlog = 20; ll n, m, ans; vector< vector<int> > a; vector< vector<bool> > vis; int x[17], y[17]; void check(ll x, ll y, ll type) { if (type == 0) { if (x == n-1 || y == 0 || y == m-1 || vis[x][y] || vis[x][y-1] || vis[x][y+1] || vis[x+1][y]) ans = -INF; else { vis[x][y] = vis[x][y-1] = vis[x][y+1] = vis[x+1][y] = 1; ans += a[x][y] + a[x][y-1] + a[x][y+1] + a[x+1][y]; } } else if (type == 1) { if (x == 0 || y == 0 || y == m-1 || vis[x][y] || vis[x-1][y] || vis[x][y-1] || vis[x][y+1]) ans = -INF; else { vis[x][y] = vis[x-1][y] = vis[x][y-1] = vis[x][y+1] = 1; ans += a[x][y] + a[x-1][y] + a[x][y-1] + a[x][y+1]; } } else if (type == 2) { if (x == 0 || x == n-1 || y == m-1 || vis[x][y] || vis[x-1][y] || vis[x+1][y] || vis[x][y+1]) ans = -INF; else { vis[x][y] = vis[x-1][y] = vis[x+1][y] = vis[x][y+1] = 1; ans += a[x][y] + a[x-1][y] + a[x+1][y] + a[x][y+1]; } } else { if (x == 0 || x == n-1 || y == 0 || vis[x][y] || vis[x-1][y] || vis[x+1][y] || vis[x][y-1]) ans = -INF; else { vis[x][y] = vis[x-1][y] = vis[x+1][y] = vis[x][y-1] = 1; ans += a[x][y] + a[x-1][y] + a[x+1][y] + a[x][y-1]; } } } void solve() { int n, m; cin >> n >> m; a.resize(n, vector<int>(m)); for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { cin >> a[i][j]; } } int k; cin >> k; for (int i=1; i<=k; i++) { cin >> x[i] >> y[i]; } ll answer = -INF; vis.resize(n, vector<bool>(m, 0)); for (int mask = 0; mask < (1 << (2*k)); mask++) { ll rmask = mask; ans = 0; for (int i=1; i<=k; i++) { ll type = (rmask%2)*2 + (rmask/2) % 2; rmask >>= 2; check(x[i], y[i], type); if (ans < 0) break; } vis.assign(n, vector<bool>(m, false)); answer = max(answer, ans); } if (answer == -INF) cout << "No" << el; else cout << answer << el; } signed main(){ ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr); //freopen("nocross.in", "r", stdin); //freopen("nocross.out", "w", stdout); int ntest = 1; //cin >> ntest; while (ntest--){ solve(); } return 0; } ;
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...