제출 #441491

#제출 시각아이디문제언어결과실행 시간메모리
441491Haruto810198Genetics (BOI18_genetics)C++17
27 / 100
2068 ms27184 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define double long double #define FOR(i, l, r, d) for(int i=(l); i<=(r); i+=(d)) #define szof(x) ((int)(x).size()) #define vi vector<int> #define pii pair<int,int> #define F first #define S second #define pb push_back #define eb emplace_back #define mkp make_pair const int INF = 2147483647; const int LNF = INF*INF; const int MOD = 1000000007; const int mod = 998244353; //#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") const int MAX = 4110; int n, m, k; string str[MAX]; int dif[MAX][MAX]; set<int> rem; int res; void find_dif(int u, int v){ if(u == v) return; if(dif[u][v] != -1) return; int cnt = 0; FOR(i, 0, m-1, 1){ if(str[u][i] != str[v][i]){ cnt++; } } dif[u][v] = dif[v][u] = cnt; if(szof(rem)>50 and u!=v and dif[u][v]!=k){ rem.erase(u); rem.erase(v); } } int randint(int r){ int a = rand(); int b = rand(); return ((a<<14) ^ b) % r; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); srand(time(NULL)); cin>>n>>m>>k; FOR(i, 1, n, 1){ cin>>str[i]; } FOR(i, 1, n, 1){ FOR(j, 1, n, 1){ dif[i][j] = -1; } } FOR(i, 1, n, 1){ rem.insert(i); } while(szof(rem) > 50){ int u; int ru = randint(szof(rem)); int v = randint(n) + 1; auto it = rem.begin(); FOR(i, 1, ru, 1){ it = next(it); } u = *it; find_dif(u, v); } for(int i : rem){ bool flag = 1; FOR(j, 1, n, 1){ find_dif(i, j); if(i!=j and dif[i][j]!=k){ flag = 0; } } if(flag){ res = i; } } cout<<res<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...