제출 #1179973

#제출 시각아이디문제언어결과실행 시간메모리
1179973zadniprovskaT-Covering (eJOI19_covering)C++20
0 / 100
118 ms167936 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<ll> > a, vis; ll x[17], y[17]; ll 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() { ll n, m; cin >> n >> m; a.resize(n, vector<ll>(m)); for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { cin >> a[i][j]; } } ll k; cin >> k; for (int i=1; i<=k; i++) { cin >> x[i] >> y[i]; } ll answer = -INF, ex = 0; vis.resize(n, vector<ll>(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 = mask%2 + (mask/2) % 2; mask >>= 2; check(x[i], y[i], type); if (ans < 0) break; } for (int i=1; i<=k; i++) { vis[x[i]][y[i]] = vis[max(0ll, x[i]-1)][y[i]] = vis[max(0ll, x[i]-1)][y[i]-1] = vis[x[i]][max(0ll, y[i]-1)] = vis[min(n-1, x[i]+1)][max(0ll, y[i]-1)] = vis[min(n-1, x[i]+1)][y[i]] = vis[min(n-1, x[i]+1)][min(m-1, y[i]+1)] = vis[x[i]][min(m-1, y[i]+1)] = vis[max(0ll, x[i]-1)][min(m-1, y[i]+1)] = 0; } mask = rmask; if (ans != -INF) ex = 1; answer = max(answer, ans); } if (!ex) 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; } ;

컴파일 시 표준 에러 (stderr) 메시지

covering.cpp: In function 'long long int check(long long int, long long int, long long int)':
covering.cpp:65:1: warning: no return statement in function returning non-void [-Wreturn-type]
   65 | }
      | ^
#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...