Submission #667746

#TimeUsernameProblemLanguageResultExecution timeMemory
667746Darren0724Genetics (BOI18_genetics)C++17
46 / 100
2020 ms59572 KiB
//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2")
#include<bits/stdc++.h>
#define all(x) x.begin(),x.begin()
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,m,k;cin>>n>>m>>k;
    vector<vector<bitset<4100>>> v(n,vector<bitset<4100>>(4));
    vector<vector<int>> ans(n,vector<int>(n,-1));
    for(int i=0;i<n;i++){
        string s;cin>>s;
        for(int j=0;j<m;j++){
            if(s[j]=='A'){
                v[i][0][j]=1;
            }
            if(s[j]=='T'){
                v[i][1][j]=1;
            }
            if(s[j]=='C'){
                v[i][2][j]=1;
            }
            if(s[j]=='G'){
                v[i][3][j]=1;
            }
        }
    }
    vector<bool> vis(n);
    vector<int> a(n),b(n);
    for(int i=0;i<n;i++){
        a[i]=i;
        b[i]=i;
    }
    random_shuffle(all(a));
    random_shuffle(all(b));
    for(int i=0;i<n;i++){
        ans[a[i]][a[i]]=k;
        if(vis[a[i]]){
            continue;
        }
        for(int j=0;j<n;j++){
            if(a[i]==b[j]){
                continue;
            }
            if(ans[a[i]][b[j]]!=-1){
                continue;
            }
            ans[a[i]][b[j]]=0;
            for(int k=0;k<4;k++){
                ans[a[i]][b[j]]+=(v[a[i]][k]&v[b[j]][k]).count();
            }
            ans[a[i]][b[j]]=m-ans[a[i]][b[j]];
            ans[b[j]][a[i]]=ans[a[i]][b[j]];
            if(ans[a[i]][b[j]]!=k){
                vis[a[i]]=1;
                vis[b[j]]=1;
                break;
            }
        }
    }
    for(int i=0;i<n;i++){
        bool flag=1;
        for(int j=0;j<n;j++){
            if(ans[i][j]!=k){
                flag=0;
            }
        }
        if(flag){
            cout<<i+1<<endl;
            break;
        }
    }

    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...