Submission #1093521

#TimeUsernameProblemLanguageResultExecution timeMemory
1093521CDuongGenetics (BOI18_genetics)C++17
100 / 100
198 ms36544 KiB
/* #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2,fma,bmi,bmi2,sse4.2,popcnt,lzcnt") */ #include <bits/stdc++.h> #define taskname "" #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define i64 long long #define isz(x) (int)x.size() using namespace std; mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); mt19937_64 rngll(chrono::high_resolution_clock::now().time_since_epoch().count()); using randint_t = uniform_int_distribution<int>; using randll_t = uniform_int_distribution<long long>; using randd_t = uniform_real_distribution<double>; // return x with probability p, y with probability 1-p template<class T> T pick(T x, T y, double p = 0.5){ assert(-0.0001 <= p && p <= 1.0001); return randd_t(0, 1)(rng) <= p ? x : y; } array<int, 2> gen_range(int n, bool allow_empty_range = false){ if(allow_empty_range){ int l = rng() % (n + 1), r = rng() % (n + 1); if(l > r) swap(l, r); return {l, r}; } else{ int l = rng() % n, r = rng() % n; if(l > r) swap(l, r); return {l, r + 1}; } } template<class T> vector<T> sample_array(int n, T low, T high, bool distinct = false){ assert(low < high && (!distinct || high - low >= n)); set<T> used; vector<T> array(n); for(auto i = 0; i < n; ++ i){ T x = randll_t(low, high - 1)(rng); if(distinct){ if(used.count(x)){ -- i; continue; } used.insert(x); } array[i] = x; } return array; } void solve() { int n, m, k; cin >> n >> m >> k; vector<string> a(n); for (auto &val : a) cin >> val; vector<int> dec(256); dec['A'] = 0, dec['C'] = 1, dec['G'] = 2, dec['T'] = 3; vector<int> hsh(n); vector sumhsh(m, vector(4, 0ll)); i64 allhsh = 0; for (int i = 0; i < n; ++i) { hsh[i] = rng(); for (int j = 0; j < m; ++j) { int ch = dec[a[i][j]]; sumhsh[j][ch] += hsh[i]; } allhsh += hsh[i]; } for (int i = 0; i < n; ++i) { i64 cur = 0; for (int j = 0; j < m; ++j) { for (int ch = 0; ch < 4; ++ch) if (ch != dec[a[i][j]]) { cur += sumhsh[j][ch]; } } if (cur == (allhsh - hsh[i]) * k) { cout << i + 1 << endl; return; } } } signed main() { #ifndef CDuongg if (fopen(taskname".inp", "r")) assert(freopen(taskname".inp", "r", stdin)), assert(freopen(taskname".out", "w", stdout)); #else freopen("bai3.inp", "r", stdin); freopen("bai3.out", "w", stdout); auto start = chrono::high_resolution_clock::now(); #endif ios_base::sync_with_stdio(false); cin.tie(nullptr); int t = 1; //cin >> t; while(t--) solve(); #ifdef CDuongg auto end = chrono::high_resolution_clock::now(); cout << "\n"; for(int i = 1; i <= 100; ++i) cout << '='; cout << "\nExecution time: " << chrono::duration_cast<chrono::milliseconds> (end - start).count() << "[ms]" << endl; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...