Submission #1249214

#TimeUsernameProblemLanguageResultExecution timeMemory
1249214tritranminh2808Genetics (BOI18_genetics)C++20
100 / 100
482 ms148764 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k;
int a[100005],c[100005],g[100005],t[100005];
int v[5005][5005];
const int base=257,mod=1e9+7;
int hs[100005];
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m >> k;
    for(int i=1;i<=n;i++){
        string s; cin >> s;
        for(int j=1;j<=m;j++) v[i][j]=s[j-1];
    }
    hs[0]=1;
    int s=0;
    for(int i=1;i<=n;i++){
         hs[i]=hs[i-1]*base%mod;
         s+=hs[i];
         s%=mod;
    }
    s*=k;
    s%=mod;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            if(v[j][i]=='A') a[i]=(a[i]+hs[j])%mod;
            else if (v[j][i]=='C') c[i]=(c[i]+hs[j])%mod;
            else if(v[j][i]=='G') g[i]=(g[i]+hs[j])%mod;
            else t[i]=(t[i]+hs[j])%mod;
        }
    }
    for(int i=1;i<=n;i++){
        int sum=0;
        for(int j=1;j<=m;j++){
            if(v[i][j]=='A') sum+=g[j]+c[j]+t[j];
            else if(v[i][j]=='C') sum+=g[j]+a[j]+t[j];
            else if(v[i][j]=='G') sum+=a[j]+c[j]+t[j];
            else  sum+=g[j]+c[j]+a[j];
            sum%=mod;
        }
        int x=(s-hs[i]*k)%mod;
        if(x<0) x+=mod;
        if(sum==x){
            cout << i;
            return 0;
        }
    }

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