碱基

题目描述
生物学家正在对n个物种进行研究。
其中第i个物种的DNA序列为s[i],其中的第j个碱基为s[i][j],碱基一定是A、T、G、C之一。
生物学家想找到这些生物中一部分生物的一些共性,他们现在关注那些至少在m个生物中出现的长度为k的连续碱基序列。准确的说,科学家关心的序列用2m元组(i1,p1,i2,p2…im,pm)表示,
满足:
1<=i1<i2<…<im<=n;
且对于所有q(0<=q<k), s[i1][p1+q]=s[i2][p2+q]=…=s[im][pm+q]。

现在给定所有生物的DNA序列,请告诉科学家有多少的2m元组是需要关注的。如果两个2m元组有任何一个位置不同,则认为是不同的元组。

【输入格式】
输入的第一行包含三个整数n、m、k,两个整数之间用一个空格分隔,意义如题目所述。
接下来n行,每行一个字符串表示一种生物的DNA序列。
DNA序列从1至n编号,每个序列中的碱基从1开始依次编号,不同的生物的DNA序列长度可能不同。

【输出格式】
输出一个整数,表示关注的元组个数。
答案可能很大,你需要输出答案除以1000000007的余数。

【样例输入】
3 2 2
ATC
TCG
ACG

【样例输出】
2

再例如:
【样例输入】
4 3 3
AAA
AAAA
AAA
AAA

【样例输出】
7

【数据规模与约定】
对于20%的数据,k<=5,所有字符串总长L满足L <=100
对于30%的数据,L<=10000
对于60%的数据,L<=30000
对于100%的数据,n<=5,m<=5,1<=k<=L<=100000
保证所有DNA序列不为空且只会包含’A’ ’G’ ’C’ ’T’四种字母

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;public class Main {public static int n, m, k;public static String[] S;public static String[] num;public static int[] start;public static long MOD = 1000000007;public static long count = 0;public static HashSet<String> result = new HashSet<String>();public void dfs(int step, int sum) {if(step == n || sum >= m) {if(sum >= m) {ArrayList<String> set = new ArrayList<String>();StringBuffer[] s = new StringBuffer[sum];for(int i = 0;i < sum;i++)s[i] = new StringBuffer("");for(int i = 0;i < n;i++) {if(!num[i].equals("-")) {if(!set.contains(num[i])) {set.add(num[i]);s[set.size() - 1].append(i);s[set.size() - 1].append(start[i]);} else {int j = set.indexOf(num[i]);s[j].append(i);s[j].append(start[i]);}}}if(set.size() == sum - m + 1) {for(int i = 0;i < sum;i++) {if(s[i].toString().length() == k * 2) {if(!result.contains(s[i].toString()))count = (count + 1) % MOD;result.add(s[i].toString());break;}}}}return;} else {for(int i = 0;i < S[step].length();i++) {if(i + k <= S[step].length()) {num[step] = S[step].substring(i, i + k);start[step] = i;dfs(step + 1, sum + 1);num[step] = "-";}dfs(step + 1, sum);}}}public static void main(String[] args) {Main test = new Main();Scanner in = new Scanner(System.in);n = in.nextInt();m = in.nextInt();k = in.nextInt();S = new String[n];for(int i = 0;i < n;i++)S[i] = in.next();num = new String[n + 1];start = new int[n + 1];for(int i = 0;i <= n;i++)num[i] = "-";test.dfs(0, 0);System.out.println(count);}}

java实现第七届蓝桥杯碱基相关推荐

  1. java中的冰雹数,java实现第七届蓝桥杯打印数字

    打印数字 打印数字 小明写了一个有趣的程序,给定一串数字. 它可以输出这串数字拼出放大的自己的样子. 比如"2016"会输出为: 00000 1 6666 2 0 0 1 1 6 ...

  2. java实现第七届蓝桥杯七星填数

    七星填数 如图[图1.png]所示. 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏. 要求每条直线上的四个数字之和必须相等. 图中已经给出了3个数字. 请计算其它位置要填充的数字,答案唯 ...

  3. java实现第七届蓝桥杯四平方和

    四平方和 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^ ...

  4. java实现第七届蓝桥杯平方末尾

    平方末尾 能够表示为某个整数的平方的数字称为"平方数" 比如,25,64 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数. 因为平方数的末位只可能是:[0, 1, ...

  5. java实现第七届蓝桥杯交换瓶子

    交换瓶子 交换瓶子 有N个瓶子,编号 1 ~ N,放在架子上. 比如有5个瓶子: 2 1 3 5 4 要求每次拿起2个瓶子,交换它们的位置. 经过若干次后,使得瓶子的序号为: 1 2 3 4 5 对于 ...

  6. java实现第七届蓝桥杯凑平方数

    凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的. 比如:0, 36, 5948721 再比如: 1098524736 1, 25, 6390784 0, 4, 28 ...

  7. java实现第七届蓝桥杯圆圈舞

    圆圈舞 题目描述 春天温暖的阳光照耀着大地,正是草原上的小动物们最快乐的时候.小动物们在草原上开了一个舞会,欢度这美好的时光. 舞会上最重要的一个环节就是跳圆舞曲,n只小动物手拉手围成一大圈,随着音乐 ...

  8. java实现第七届蓝桥杯有奖竞猜

    有奖竞猜 题目描述 小明很喜欢猜谜语. 最近,他被邀请参加了X星球的猜谜活动. 每位选手开始的时候都被发给777个电子币. 规则是:猜对了,手里的电子币数目翻倍, 猜错了,扣除555个电子币, 扣完为 ...

  9. java算法 第七届 蓝桥杯B组(题+答案) 3.凑算式

    3.凑算式  (结果填空) B      DEF A + --- + ------- = 10      C      GHI           (如果显示有问题,可以参见[图1.jpg])   这 ...

最新文章

  1. 联通短信网关返回90状态的解决
  2. View工作原理(四)view的layout过程
  3. android 自动补全方法,Android零基础入门|自动完成文本框AutoCompleteTextView
  4. php的declare命令
  5. 隐藏SyntaxHighlighter滚动条
  6. 【SpringBoot零基础案例01】【IEDA 2021.1】如何创建一个SpringBoot框架web项目
  7. 《看聊天记录都学不会Python到游戏实战?太菜了吧》(10)无底洞的循环
  8. 如何编写自定义的Web控件
  9. ceph auth get_CPB羽梦幻境体验展来了!快来GET限量产品!
  10. 【STM32】手把手固件库开发工程建立
  11. 突然!新锤子手机系统现身:这是另起炉灶了?
  12. Java新职篇:类型提升的约定
  13. 读写SQL数据库Image字段
  14. 小爱mini改aux立体声_拆解报告:Redmi小爱音箱Play
  15. 《逻辑与计算机设计基础(原书第5版)》——导读
  16. openwrt编译ifb.ko模块问题
  17. mysql 1677_mysql之数据库主从复制配置报错1677
  18. 3KAL芯片规格书,3KAL电路图
  19. 前端导出Excel,修改字体样式以及居中等
  20. 2022 百度面试题

热门文章

  1. 计算机、计算与计算思维
  2. omf多路径 oracle_Oracle管理文件OMF (oracle managed files)
  3. 倒排索引(反向索引)
  4. 解决生产环境一次tomcat无故宕机的诡异问题
  5. validation使用
  6. css实现图片的3d旋转-照片墙
  7. Windows Socket套接字(四)-Windows套接字错误代码
  8. linux系统怎么访问u盘文件系统,linux如何挂载U盘及文件系统(或需要用到的).doc
  9. 百度联合清华,全球首个十亿像素数据集来了!
  10. Google play谷歌商店发布应用2021