Submission #1284556

#TimeUsernameProblemLanguageResultExecution timeMemory
1284556PanndaGenetics (BOI18_genetics)C++20
100 / 100
283 ms17264 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
    auto rand = [&](long long n) {
        return uniform_int_distribution<long long>(0, n - 1)(rng);
    };

    int n, m, k;
    cin >> n >> m >> k;

    vector<long long> hn(n);
    long long all_k = 0;
    for (int i = 0; i < n; i++) {
        hn[i] = rand(1LL << 62);
        all_k += k * hn[i];
    }

    auto convert = [&](char c) -> int {
        if (c == 'A') return 0;
        if (c == 'T') return 1;
        if (c == 'G') return 2;
        if (c == 'C') return 3;
        return -1;
    };

    vector<string> str(n);
    vector<array<long long, 4>> mp(m, array<long long, 4>{});
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        for (int j = 0; j < m; j++) {
            int c = convert(s[j]);
            mp[j][c] += hn[i];
        }
        str[i] = s;
    }

//    for i in n:
//        for j in m:
//            identify those strings that differs in this char, let the mask be [0, 1, 1, 0, 0, 1, 0] (size n)
//        if summing of those mask becomes [K, K, K, 0, K, K] (size n, 0 is at i)
//            then win

    for (int i = 0; i < n; i++) {
        long long sum = 0;
        for (int j = 0; j < m; j++) {
            int c = convert(str[i][j]);
            for (int nc = 0; nc < 4; nc++) if (nc != c) {
                sum += mp[j][nc];
            }
        }
        long long expect_sum = all_k - k * hn[i];
        if (sum == expect_sum) {
            cout << i + 1 << '\n';
            break;
        }
    }

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...