제출 #1038980

#제출 시각아이디문제언어결과실행 시간메모리
1038980vjudge1Domino (COCI15_domino)C++17
50 / 160
4074 ms377376 KiB
#include <bits/stdc++.h> using namespace std; #define F first #define S second typedef long long ll; typedef pair<ll, ll> pii; const ll N = 2e3 + 10, K = 8; ll n, k, mat[N][N], exist[N][N], mark[N][N]; vector<pii> cells, my_cells; ll dx[4] = {0, 1, 0, -1}; ll dy[4] = {1, 0, -1, 0}; bool done; long long ans, total; void dfs(ll i){ if (i >= my_cells.size()){ done = 1; return; } auto p = my_cells[i]; if (mark[p.F][p.S]){ dfs(i + 1); return; } mark[p.F][p.S] = 1; for (ll i = 0; i < 4; i ++){ ll nx = p.F + dx[i]; ll ny = p.S + dy[i]; if (!exist[nx][ny]) continue; if (mark[nx][ny]) continue; mark[nx][ny] = 1; dfs(i + 1); mark[nx][ny] = 0; } mark[p.F][p.S] = 0; } int main(){ cin >> n >> k; for (ll i = 1; i <= n; i ++) for (ll j = 1; j <= n; j ++) cin >> mat[i][j], total += mat[i][j]; vector<pair<ll, pair<pii, pii>>> vec; for (ll i = 1; i <= n; i ++){ for (ll j = 1; j <= n; j ++){ if (j + 1 <= n) vec.push_back({mat[i][j] + mat[i][j + 1], {{i, j}, {i, j + 1}}}); if (i + 1 <= n) vec.push_back({mat[i][j] + mat[i + 1][j], {{i, j}, {i + 1, j}}}); } } sort(vec.begin(), vec.end()); ll mn = 4 * k + 3; set<pii> st; while (vec.size() and st.size() < mn){ st.insert((vec.back()).S.F); st.insert((vec.back()).S.S); vec.pop_back(); } for (auto p : st){ cells.push_back(p); } ans = total; ll sz = cells.size(); for (ll mask = 0; mask < (1 << sz); mask ++){ ll c = __builtin_popcount(mask); if (c != 2 * k) continue; my_cells.clear(); long long sm = 0; for (ll i = 0; i < sz; i ++){ if ((1 << i) & mask){ my_cells.push_back(cells[i]); sm += mat[cells[i].F][cells[i].S]; } } for (auto p : my_cells) exist[p.F][p.S] = 1; done = 0; dfs(0); for (auto p : my_cells) exist[p.F][p.S] = 0; if (done) ans = min(ans, total - sm); } cout << ans << endl; }

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

domino.cpp: In function 'void dfs(ll)':
domino.cpp:22:11: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     if (i >= my_cells.size()){
      |         ~~^~~~~~~~~~~~~~~~~~
domino.cpp: In function 'int main()':
domino.cpp:66:37: warning: comparison of integer expressions of different signedness: 'std::set<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   66 |     while (vec.size() and st.size() < mn){
      |                           ~~~~~~~~~~^~~~
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...