Submission #888348

# Submission time Handle Problem Language Result Execution time Memory
888348 2023-12-17T03:37:52 Z 1075508020060209tc Genetics (BOI18_genetics) C++14
0 / 100
79 ms 246284 KB
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define int long long
//const int mod=998244353;
unsigned long long seed=1234;
unsigned long long rnd(){
seed^=seed<<13;
seed^=seed>>7;
seed^=seed>>6;
return seed;
}

int n;int m;int K;
int gr[4105][4105];
int ps[4][4105][4105];
int mby[4105];
void init(){
cin>>n>>m>>K;
string s;
for(int i=1;i<=n;i++){
    cin>>s;
    s="*"+s;
    for(int j=1;j<=m;j++){
        if(s[j]=='A'){
            gr[i][j]=0;
        }
        if(s[j]=='C'){
            gr[i][j]=1;
        }
        if(s[j]=='G'){
            gr[i][j]=2;
        }
        if(s[j]=='T'){
            gr[i][j]=3;
        }
    }
}
for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
        ps[gr[i][j]][i][j]++;
        for(int k=0;k<4;k++){
            ps[k][i][j]+=ps[k][i-1][j];
        }
    }
}

}

int ok(int id){
int dif=0;
for(int i=1;i<=m;i++){
    dif+=n-ps[gr[id][i]][n][i];
}
if(dif!=K*(n-1)){return 0;}
for(int ttt=1;ttt<=20;ttt++){
    int pl=1+rnd()%n;
    dif=0;
    for(int i=1;i<=m;i++){
        dif+=pl-ps[gr[id][i]][pl][i];
    }
    if(dif!=K*pl-((pl>=id)*K) ){return 0;}
    dif=0;
    pl--;
    for(int i=1;i<=m;i++){
        dif+=(n-pl)-(ps[gr[id][i]][n][i]-ps[gr[id][i]][pl][i]);
    }
    if(dif!=K*(n-pl)-((pl<id)*K) ){return 0;}
}
for(int ttt=1;ttt<=20;ttt++){
    int pl=1+rnd()%n;
    if(pl==id){continue;}
    dif=0;
    for(int i=1;i<=m;i++){
        if(gr[id][i]!=gr[pl][i]){dif++;}
    }
    if(dif!=K){
        mby[pl]=-1;
        return 0;
    }
}
return 1;
}

int fchk(int id){

for(int pl=1;pl<=n;pl++){
    if(pl==id){continue;}
    int dif=0;
    for(int i=1;i<=m;i++){
        if(gr[id][i]!=gr[pl][i]){dif++;}
    }
    if(dif!=K){return 0;}
}
return 1;
}

signed main(){
init();
for(int i=1;i<=n;i++){
    if(mby[i]==-1){continue;}
    mby[i]=ok(i);
    if(mby[i]){
        cout<<i;return 0;
    }
}
for(int i=1;i<=n;i++){
    if(mby[i]==1&&fchk(i)){
        cout<<i;return 0;
    }

}


}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 17244 KB Output is correct
2 Correct 3 ms 21340 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Incorrect 3 ms 16988 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 79 ms 246284 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 79 ms 246284 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 17244 KB Output is correct
2 Correct 3 ms 21340 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Incorrect 3 ms 16988 KB Output isn't correct
5 Halted 0 ms 0 KB -