Submission #1363513

#TimeUsernameProblemLanguageResultExecution timeMemory
1363513madamadam3Genetics (BOI18_genetics)C++20
Compilation error
0 ms0 KiB
#pragma GCC optimize("O3")
#pragma GCC target("popcnt")

#include <bits/stdc++.h>
using namespace std;

/*
trying the bitset idea with the subtasks "dna has only A or C" worked for the smaller one, but failed
for the larger one until i cut the constant in half by only checking i+1..n, and precomputing counts for
those smaller than me. so now that its 4 bitsets not 1, maybe i can eliminate a bitset or 2 and also shuffling the order
means we expect to find the correct one within the first half of the array, halving the expected time
*/

int main() {
    cin.tie(0)->sync_with_stdio(0);
    
    int n, m, k; cin >> n >> m >> k;
    vector<string> seq(n); for (int i = 0; i < n; i++) cin >> seq[i];
    using b = bitset<4100>;

    vector<int> idx(n); iota(idx.begin(), idx.end(), 0);
    mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
    shuffle(idx.begin(), idx.end(), rng);
    vector<b> s1(n), s2(n);
    for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) {
        auto c = seq[idx[i]][j];
        if (c == 'C' || c == 'T') s1[i][j] = 1;
        if (c == 'G' || c == 'T') s2[i][j] = 1;
    }

    vector<int> cnt(n);

    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            int t = 0;
            t += ((s1[i] ^ s1[j]) | (s2[i] ^ s2[j])).count();

            if (t == k) cnt[i]++, cnt[j]++;
        }

        if (cnt[i] == n-1) {
            cout << idx[i]+1 << "\n";
            break;
        }
    }
    return 0;
}

Compilation message (stderr)

In file included from /usr/include/c++/13/string:43,
                 from /usr/include/c++/13/bitset:52,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:52,
                 from genetics.cpp:4:
/usr/include/c++/13/bits/allocator.h: In destructor 'constexpr std::__cxx11::basic_string<char>::_Alloc_hider::~_Alloc_hider()':
/usr/include/c++/13/bits/allocator.h:184:7: error: inlining failed in call to 'always_inline' 'constexpr std::allocator< <template-parameter-1-1> >::~allocator() noexcept [with _Tp = char]': target specific option mismatch
  184 |       ~allocator() _GLIBCXX_NOTHROW { }
      |       ^
In file included from /usr/include/c++/13/string:54:
/usr/include/c++/13/bits/basic_string.h:181:14: note: called from here
  181 |       struct _Alloc_hider : allocator_type // TODO check __is_final
      |              ^~~~~~~~~~~~