Bovine Genomics 题解
2023-08-27 12:21:51
发布于:广东
10阅读
0回复
0点赞
题意
前三行就是有斑点的牛的基因型的字符串,后三行是没有斑点的牛的基因型的字符串,每三个碱基判断一下前三行出现过的后三行是否出现过。直接暴力,但是判断是否出现过是要用一个比较巧妙地办法,避免直接判断,直接判断会超时。
用数组下标来判断。详细见代码。
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
int a[1005][1005];
int main ()
{
#ifndef ONLINE_JUDGE
freopen("1","r",stdin);
#endif // ONLINE_JUDGE
ios_base::sync_with_stdio(false);
cin.tie(0);
//mem(a);
map <char,int> M;
int m,n;
char c;
M['A']=1;
M['T']=2;
M['G']=3;
M['C']=4;
cin>>m>>n;
for(int i=0; i<m*2; ++i)
{
for(int j=0; j<n; ++j)
{
cin>>c;
a[i][j]=M[c];
}
}
int ans=0;
for(int i=0; i<n; ++i)
for(int j=i+1; j<n; ++j)
for(int k=j+1; k<n; ++k)
{
bool p[1000];
mem(p);
bool flag=true;
for(int c=0; c<m; ++c)
p[a[c][i] + a[c][j]*6 + a[c][k]*25] = true;
for(int d=m; d<2*m; ++d)
if(p[a[d][i] + a[d][j]*6 + a[d][k]*25] == true)
flag=false;
if(flag)
ans++;
}
cout<<ans<<endl;
return 0;
}
这里空空如也
有帮助,赞一个