제출 #1034575

#제출 시각아이디문제언어결과실행 시간메모리
1034575anangoGenetics (BOI18_genetics)C++17
0 / 100
2072 ms348 KiB
#include <bits/stdc++.h> #define int long long using namespace std; mt19937 rng; int INF = 1LL<<30; int n,m,k; int isvalid(int a, int b) { //is a/b close enough to k/m (statistically) int maxdelta = sqrt(b)+2; maxdelta*=(b+m); int realdelta = abs(b*k-a*m); return realdelta<=maxdelta; } int match(string &s1, string &s2) { int ct=0; for (int i=0; i<m; i++) { ct+=s1[i]!=s2[i]; //if (!isvalid(ct,i+1)) return -1; } return ct; } signed main() { /*#ifndef ONLINE_JUDGE // for getting input from input.txt freopen("input.txt", "r", stdin); // for writing output to output.txt freopen("output.txt", "w", stdout); #endif*/ rng.discard(time(NULL)%1000); ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> k; vector<string> ar(n); vector<int> order(n); vector<int> sorder(m); vector<int> visited(n,0); for (int i=0; i<n; i++) { int r = (rng()+rng()+rng())%n; while (visited[r]) { r = rng()%n; r+=rng(); r%=n; } visited[r] = 1; order[i] = r; //assert(order[i]<n); //cout << i <<" " <<r << endl; } visited=vector<int>(m,0); for (int i=0; i<m; i++) { int r = (rng()+rng()+rng())%m; while (visited[r]) { r = rng()%m; r+=rng(); r%=n; } visited[r] = 1; sorder[i] = r; //assert(order[i]<n); //cout << i <<" " <<r << endl; } for (int i=0; i<n; i++) { string s; cin >> s; vector<char> t(m); for (int j=0; j<m; j++) t[j] = s[sorder[j]]; string r; for (auto j:t) r.push_back(j); ar[i] = r; } for (int i=0; i<n; i++) { int gg = 1; for (int j=0; j<n; j++) { if (order[i]==order[j]) continue; //assert(ar[order[j]].size()==m); if (match(ar[order[i]],ar[order[j]])!=k) { gg=0; break; } } if (gg) { cout << order[i]+1 << endl; 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...