Submission #471853

#TimeUsernameProblemLanguageResultExecution timeMemory
471853prvocisloLamps (JOI19_lamps)C++17
47 / 100
1076 ms113808 KiB
#include <iostream> #include <vector> #include <algorithm> #include <set> #include <map> #include <queue> typedef long long ll; using namespace std; const int inf = 1e9 + 5; void upd(int& a, const int& b) { a = min(a, b); } int main() { ios::sync_with_stdio(false); cin.tie(0); int n; string sa, sb; cin >> n >> sa >> sb; vector<int> a, b; for (int i = 0; i < n; i++) a.push_back(sa[i] == '1'); for (int i = 0; i < n; i++) b.push_back(sb[i] == '1'); map<vector<int>, int> m; int cnt = 0; for (int i = 0; i < 8; i++) { vector<int> v; for (int j = 0; j < 3; j++) if (i & (1 << j)) v.push_back(j); do { if (!m.count(v)) m[v] = cnt++; } while (next_permutation(v.begin(), v.end())); } vector<vector<int> > dp(n + 1, vector<int>(cnt, inf)); dp[0][m[{}]] = 0; for (int i = 0; i < n; i++) { // ideme ukoncit par zmien for (const pair<vector<int>, int>& p : m) { for (int j = 0; j < (1 << p.first.size()); j++) { vector<int> x; for (int k = 0; k < p.first.size(); k++) if (j & (1 << k)) x.push_back(p.first[k]); upd(dp[i][m[x]], dp[i][p.second]); } } // ideme vytvorit par zmien for (const pair<vector<int>, int>& p : m) { for (int j = 0; j < (1 << p.first.size()); j++) { vector<int> x; for (int k = 0; k < p.first.size(); k++) if (j & (1 << k)) x.push_back(p.first[k]); upd(dp[i][p.second], dp[i][m[x]] + p.first.size() - x.size()); } } // ideme na dalsi prvok for (const pair<vector<int>, int>& p : m) { int val = a[i]; for (int j : p.first) { if (j == 0) val = 0; if (j == 1) val = 1; if (j == 2) val = !val; } if (val == b[i]) upd(dp[i + 1][p.second], dp[i][p.second]); } } int ans = inf; for (int i = 0; i < dp[n].size(); i++) upd(ans, dp[n][i]); cout << ans << "\n"; return 0; }

Compilation message (stderr)

lamp.cpp: In function 'int main()':
lamp.cpp:43:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |     for (int k = 0; k < p.first.size(); k++) if (j & (1 << k))
      |                     ~~^~~~~~~~~~~~~~~~
lamp.cpp:54:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     for (int k = 0; k < p.first.size(); k++) if (j & (1 << k))
      |                     ~~^~~~~~~~~~~~~~~~
lamp.cpp:73:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |  for (int i = 0; i < dp[n].size(); i++) upd(ans, dp[n][i]);
      |                  ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...