Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <bitset>
- #include <iostream>
- #include <vector>
- using std::cin;
- using std::cout;
- void make_bitset(std::bitset<101> &bits, int num) {
- while (num != 1) {
- if (num <= 100) {
- bits[num] = true;
- }
- if (num % 2) {
- num = (num * 3 + 1) / 2;
- } else {
- num /= 2;
- }
- }
- }
- int main() {
- std::ios::sync_with_stdio(false);
- std::bitset<101> bits;
- bits.reset();
- std::vector<int> previous_choice;
- previous_choice.reserve(100);
- int nums[100];
- int n;
- cin >> n;
- for (int i = 0; i < n; ++i) {
- cin >> nums[i];
- }
- for (int i = n-1; i >= 0; --i) {
- if (!bits[nums[i]]) {
- bits.reset();
- make_bitset(bits, nums[i]);
- for (auto x = previous_choice.begin();
- x != previous_choice.end();) { //把之前选择中在新bitset的元素去除
- if (bits[*x]) {
- x = previous_choice.erase(x);
- } else {
- make_bitset(bits, *x);
- ++x;
- }
- }
- previous_choice.push_back(nums[i]);
- }
- }
- int size = previous_choice.size();
- for (int i = 0; i < size - 1; ++i) {
- cout << previous_choice[i] << ' ';
- }
- cout << previous_choice[size - 1] << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement