Submission #1289731

#TimeUsernameProblemLanguageResultExecution timeMemory
1289731mhaerNorela (info1cup18_norela)C++20
75 / 100
875 ms580 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int to_bits(vector<int>& numbers) { int number = 0; int cnt = 64; for (int i = numbers.size()-1;i >= 0;i--) { // cout << numbers[i] << " "; while (numbers[i] < cnt) { cnt--; number *= 2; } // cout << cnt << " " << number << " - "; number += 1; } while (--cnt) { number *= 2; } // cout << "\n"; return number; } int target = 0; vector<int> dp; pair<int, vector<int>> bf(vector<int>& numbers, vector<int> fk, int index, int number) { if (index == numbers.size()) { if (number == target) { for (int i : fk) { dp[i] = min(dp[i], (int)fk.size()); } return {0, fk}; } else { return {+1000000000000, fk}; } } if (number == target) { return {0, fk}; } // if (fk.size() >= dp[index]) { // return {+10000000000000, fk}; // } else { // dp[index]=fk.size(); // } if (fk.size() >= dp[index]) { return {100000000000, fk}; } fk.push_back(index); auto ans2 = bf(numbers, fk, index+1, number ^ numbers[index]); // cout << "1: " << (numbers[index]^number) << "\n"; fk.pop_back(); auto ans1 = bf(numbers, fk, index+1, number); ans2.first += 1; auto result = min(ans1, ans2); return result; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n ,m; cin >> n >> m; vector<int> results(m); for (int i = 0;i < m;i++) { int l; cin >> l; vector<int> numbers(l); for (int& i : numbers) cin >> i; // for (int i : numbers) { // cout << i << " "; // } // cout << "a\n"; results[i] = to_bits(numbers); } for (int i = 1;i <= n;i++) { target *= 2; target += 1; } dp.resize(results.size(), 1000000000000); auto result = bf(results, {}, 0, 0); cout << result.first << "\n"; for (int i : result.second) { cout << i+1 << " "; } cout << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...