题解【loj537】「LibreOJ NOIP Round #1」DNA 序列
题目描述
\(NOIP\)复赛之前\(HSD\)桑进行了一项研究,发现人某条染色体上的一段\(DNA\)序列中连续的\(k\)个碱基组成的碱基序列与做题的 \(AC\) 率有关!于是他想研究一下这种关系。
现在给出一段 \(DNA\) 序列,请帮他求出这段 \(DNA\) 序列中所有连续\(k\)个碱基形成的碱基序列中,出现最多的一种的出现次数。
输入格式
两行,第一行为一段 \(DNA\) 序列,保证 \(DNA\) 序列合法,即只含有 \(A, G, C, T\) 四种碱基;
第二行为一个正整数\(k\),意义与题目描述相同。
输出格式
一行,一个正整数,为题目描述中所求答案。
样例
样例输入 1
AAAAA
1
样例输出 1
5
样例解释 1
对于这段 \(DNA\) 序列,连续的\(1\)个碱基组成的碱基序列只有
A,共出现\(5\)次,所以答案为\(5\)。
样例输入 2
ACTCACTC
4
样例输出 2
2
样例解释 2
对于这段 \(DNA\) 序列,连续的\(4\)个碱基组成的碱基序列为:
\(ACTC, CTCA, TCAC\)与 \(CACT\)。其中 \(ACTC\)出现\(2\)次,其余均出现 \(1\) 次,所以出现最多的次数为\(2\),即为答案。
数据范围与提示
记 \(DNA\) 序列长度为\(n\)。
本题共\(10\)组数据,只有输出与标准输出一致才可以获得该测试点的分数。
下面给出每组数据的范围和满足性质情况:

性质:给出的 \(DNA\) 碱基序列中每个碱基均相同。
对于所有数据均保证 \(k \leq n\)
题解
这题很容易想到用\(STL\)的\(map\)解决。
然而,经过本人的尝试,\(map\)在这题中只能得到\(80\)分的成绩,出题人会卡。
但是,\(unordered\)_\(map\)在此题中并不会被卡。
所以用\(unordered\)_\(map\)就可以啦\(QwQ\)。
(前提是评测开启\(C++11\))
代码
#pragma GCC optimize(2)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <string>
#include <unordered_map>
using namespace std;
inline int gi()
{
int f = 1, x = 0; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar();}
return f * x;
}
string s;
int len, k, n, m, ans, js, p[9];
unordered_map <string, int> ap;
int main()
{
cin >> s;
k = gi();
len = s.size();
bool fl = true;
for (int i = 1; i < len; i++)
{
if (s[i] != s[i - 1]) fl = false;
}
if (fl)
{
if (k == 1)
{
printf("%d\n", len);
return 0;
}
else
{
printf("%d\n", len - k + 1);
return 0;
}
}
else if (k == 1)
{
for (int i = 0; i < len; i++)
{
if (s[i] == 'A') ++p[1];
else if (s[i] == 'G') ++p[2];
else if (s[i] == 'C') ++p[3];
else ++p[4];
}
printf("%d\n", max(p[1], max(p[2], max(p[3], p[4]))));
return 0;
}
else
{
for (int i = 0; i < s.size() - k + 1; i++) ++ap[s.substr(i, k)];
for (auto it : ap) ans = max(ans, it.second);
printf("%d\n", ans);
}
return 0;
}
题解【loj537】「LibreOJ NOIP Round #1」DNA 序列的更多相关文章
- 「LOJ 537」「LibreOJ NOIP Round #1」DNA 序列
description NOIP 复赛之前,HSD 桑进行了一项研究,发现人某条染色体上的一段 DNA 序列中连续的\(k\)个碱基组成的碱基序列与做题的 AC 率有关!于是他想研究一下这种关系. 现 ...
- <题解>「LibreOJ NOIP Round #1」序列划分
solutions 题面loj#542 对我来说,这或许已经超出了我的能力,我,只能看题解 不知道我写完这一篇题解之后,会不会对我的构造题有一点点的帮助 让我在这类题的解决上能过有一些提升 直接说明白 ...
- 【LibreOJ】#538. 「LibreOJ NOIP Round #1」数列递推
[题意]LibreOJ [算法]乱搞 [题解]容易发现数列最后一定单调,最后单调递增则最大值赋为最后一个,反之最小值赋为最后一个,然后处理一些细节就可以AC,要注意以下几点: 1.数列连续三项以及数列 ...
- 【LibreOJ】#539. 「LibreOJ NOIP Round #1」旅游路线
[题意]给定正边权有向图,车油量上限C,每个点可以花费pi加油至min(C,ci),走一条边油-1,T次询问s点出发带钱q,旅行路程至少为d的最多剩余钱数. n<=100,m<=1000, ...
- 【LibreOJ】#541. 「LibreOJ NOIP Round #1」七曜圣贤
[题意]一开始车上有编号为0~a的红茶,过程中出现的红茶编号仅有[0,b),有三种操作: 1.买进编号未在车上出现过的红茶. 2.丢掉车上指定编号的红茶. 3.将最早丢出去的红茶捡回来. 每次操作后求 ...
- 「LibreOJ NOIP Round #1」旅游路线
Description T 城是一个旅游城市,具有 nnn 个景点和 mmm 条道路,所有景点编号为 1,2,...,n1,2,...,n1,2,...,n.每条道路连接这 nnn 个景区中的某两个景 ...
- LibreOJ #539. 「LibreOJ NOIP Round #1」旅游路线(倍增+二分)
哎一开始看错题了啊T T...最近状态一直不对...最近很多傻逼题都不会写了T T 考虑距离较大肯定不能塞进状态...钱数<=n^2能够承受, 油量再塞就不行了...显然可以预处理出点i到j走c ...
- LibreOJ #541. 「LibreOJ NOIP Round #1」七曜圣贤(单调队列)
被以前自己瞎YY的东西坑了T T...单调队列的确是可以维护这种操作的.... 显然这题可以转化成维护不在车上的东西的最小值, 支持插入和删去最早出现的值,然后就可以用单调队列了T T #includ ...
- 「LibreOJ NOIP Round #1」七曜圣贤
题目啰嗦:支持三个操作: 不可重复集合:1.加入一个数 2.删除一个数 3.恢复目前最早的一次删除的数 操作可能不合法,每次有效操作之后求集合的mex(最小没有出现过的数) 50组数据+1e6,必须O ...
随机推荐
- Java第二节课总结
Java的基本运行单位是类.类由数据成员和函数成员组成.变量的类型之间可以相互转换.String是一个类.static代表静态变量. 运行结果: false false ...
- 如果在vscode 中用运行快捷键(Ctrl+Alt+N)出现中文的乱码
在VSCODE中,运行代码的快捷方式是Ctrl+Alt+N,终止 代码运行的方式是Ctrl+Alt+M,但是有时候会出现汉字的乱码,这种情况并不是代码有问题,只要在terminal 中运行代码就可以了 ...
- 关于文件中"wb"与"rb"的理解
“rb”,”wb”这两种方式在操作文件时,直接跳过了系统的编码方式,在windows系统中,用的编码为gbk: ①:with open(“a.txt”,”w”) as f1: F1.write(“aa ...
- Python 绘图 cookbook
目录 python绘图常见bug matplotlib包加载 解决中文绘图乱码解决方法 解决python中用matplotlib画多幅图时出现图形部分重叠的问题 python绘图常见bug matpl ...
- python中的strip()方法
python中字符串str的strip()方法 str.strip()就是把字符串(str)的头和尾的空格,以及位于头尾的\n \t之类给删掉. 例1: str=" python " ...
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.21.1.10-加-6.4)Atomic_Operations
5.21.1.10 Write Atomicity Normal 这个特性控制AWUN和NAWUN参数的操作.设置的属性值在set Feature命令的Dword 11中表明. 如果提交Get Fea ...
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.2)-- Asynchronous Event Request command
5.2 异步事件请求命令 异步事件用于当状态.错误.健康信息这些事件发生时通知主机软件.为了使能这个controller报告的异步事件,主机软件需要提交一个或多个异步事件请求命令到controller ...
- Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流
感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...
- Spring域属性自动注入byName和byType
byName 方式 <!--byName约束:bean当中的域属性名必须跟所注入bean的id相同--> <bean id="student" class=&qu ...
- Myeclipse连接Mysql数据库时报错:Error while performing database login with the pro driver:unable
driver template: Mysql connector/j(下拉框进行选择) driver name: 任意填,最好是数据库名称,方便查找 connection URL: jdbc:mysq ...