제출 #1212320

#제출 시각아이디문제언어결과실행 시간메모리
1212320StefanSebezGenetics (BOI18_genetics)C++20
100 / 100
458 ms97500 KiB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
#pragma GCC target("popcnt")
const int N=4110;
mt19937 rng(time(0));
int n,m,K;
string s[N];
int a[N][N];
bool was[N],boja[N];
int broj;
int cnt[2][4][N];
void Solve(){
	int num[2]={0};
	for(int k=0;k<=1;k++) for(int i=0;i<=3;i++) for(int j=0;j<m;j++) cnt[k][i][j]=0;
	for(int i=0;i<n;i++){
		boja[i]=rng()%2;
		num[boja[i]]++;
		for(int j=0;j<m;j++) cnt[boja[i]][a[i][j]][j]++;
	}
	for(int i=0;i<n;i++){
		if(was[i]) continue;
		int x[2]={0};
		for(int j=0;j<m;j++){
			for(int k=0;k<=1;k++) x[k]+=num[k]-cnt[k][a[i][j]][j];
		}
		num[boja[i]]--;
		if(x[0]!=num[0]*K||x[1]!=num[1]*K) was[i]=true,broj--;
		num[boja[i]]++;
	}
}
int main(){
    scanf("%i%i%i",&n,&m,&K);
    for(int i=0;i<n;i++) cin>>s[i];
    for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(s[i][j]=='A') a[i][j]=0;
			if(s[i][j]=='C') a[i][j]=1;
			if(s[i][j]=='G') a[i][j]=2;
			if(s[i][j]=='T') a[i][j]=3;
		}
    }
    broj=n;
    while(broj>1) Solve();
    int res=0;
    for(int i=0;i<n;i++) if(!was[i]) res=i;
    res++;
    printf("%i\n",res);
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

genetics.cpp: In function 'int main()':
genetics.cpp:37:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |     scanf("%i%i%i",&n,&m,&K);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...