AT_genocon2021_c.Practice 3
入门
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定 m 个由字母 A、C、G、T 组成的字符串。现在,可以在每个字符串的任意位置插入表示空白的字符 -,使得所有字符串的长度都变为 n,并将这些长度相同的 m 个字符串组成 m×n 的矩阵 S。S 的第 i 行第 j 列的元素记作 Si,j(1≤i≤m, 1≤j≤n)。行向量和列向量分别记作 Si,∗、S∗,j。现在,希望通过合理地插入 -,使得每一列尽可能多地出现相同的字符。
为衡量每一列“整齐”的程度,对于长度为 m 的字符串 t,定义如下分数 C:
C(t)=x∈{A,T,G,C,−}min∣{t[i] ∣ t[i]=x (i=1,…,m)}∣
通俗地说,C(t) 表示 t 中出现次数最多的字符以外的字符的个数。例如,$t = $ CCCC-T 时,C 出现次数最多,C 以外的字符 - 和 T 的总数为 2,所以 C(t)=2。又如,$t = $ CCAA-T 时,C 和 A 出现次数相同,任选其一作为 x,C 以外的字符 A、-、T 的总数为 4,所以 C(t)=4。
对于 S 的所有列向量,计算 C(S∗,j),其总和越小,说明输入字符串经过调整后同一列出现相同字符的次数越多。通过在字符串中适当插入 -,使得三条及以上的字符串对齐,这种操作称为多序列比对(Multiple Alignment)。定义所有列的分数总和为 Call(S)=∑j=1nC(S∗,j)。
例如,对于 3 个字符串 GGATC, GGAT, GACC,如果按如下方式插入 -:
GGATC
GGAT-
G-ACC
则 Call(S)=C(S∗,1)+C(S∗,2)+C(S∗,3)+C(S∗,4)+C(S∗,5)=0+1+0+1+1=3。
给定 m 个字符串 s1,…,sm,请输出一种多序列比对方案,使 Call(S) 尽可能小。
输入格式
输入从标准输入读取,格式如下:
m s1 s2 : sm
输出格式
请输出一种多序列比对方案,使 Call 尽可能小。按照输入顺序输出每个字符串,在适当位置插入 -,使所有字符串长度相同。每一行的长度必须一致,且每一行去除 - 后应与对应输入字符串完全一致。
输入输出样例
输入#1
10 GGAGGTTATTGCTGTGGAGGTACTGGAGAAGGAGGATGCTAGCGTTGGGTAAACCACGAGCATTTTGACTTGTACTTCGCCTC GGGTTATTGCTGTTGTGAGTACTGGAGACAGGAGGGAGTGTTAGAGTTGGGGTAAACCACAGTAGCTCATGTCACTTGGATAACTCGTCAGCCTC GGTCACTCGCTGTGGAGAGTACTTTGAGACAGGAGGGAGTGCTAGAGTTTGGGGTAAAACCACAGCAGCTCATGCACTTGGATATCTGTGAGCC GAGGTTAGTGCTGTGGAGAGTACTGGAGACAGGAGGGAGTGCTAGAGTTGGGGTAAAGCACAGCACCATTCACTGATAAATGTCAGGCCTAGGGG GAGGTATTGCTGTGGAGGGTACTGGAGACAGGAGGAGTGCTAGAGGTTGGGGTAAAACCACAGCAGCTCATTTACTTGATACTGTCAGGCTCAGG GAGGTTATTTGCTGTGGAGAGTTACTGAGACATGGGGTGCCAAGTTGGGTAGCTACAGCAGCTCATTTCACTTGATACTGCAGGCTCTCAG GAGTTAATTTCGTGGAGAGTACTAGAGCACAGGAGGGAGGCCAGATTGGGGTATACCACAGCAGCTCGTTCACTTTAACTGTCAGGCCCTCA ACAGTTTAATTGATGGGCGGAGAGTACTGGAGACAGGAGGGAGTGCTAGAGTGGGGTAAACCACAGCAGCATCTTTCATTATAACTGTCAG CAAGGTTTTTTCGCTGTGGAGAGTACTGGAGACCGGGGAGTGTAGACTTTGGGGTATCACGTAGCAGCTTATTTCGACTTTGTACTGTAA GAGTTATTTCTGTGGAGAGAACTGGAGACGGAGGGAGTGCTAGAGTTGGGGTAAACACCAGGCAGCCATTTCACTTGATAACTGTCAGGCCTT
输出#1
GGAGGTTA-TTGCT--GTGGAG-GTAC-TGGAGA-AGGA-GGA-TGCTAGCG-TT-GGGT-AAACCAC-G-AGC-ATTTTGACTT-G-T-ACT--TC-GCCTC---- --GGGTTA-TTGCT--GTTGTGAGTAC-TGGAGACAGGAGGGAGTGTTAGAG-TTGGGGT-AAACCACAGTAGCTCATGTCACTTGGATAACTCGTCAGCCTC---- ---GGTCACTCGCT--GTGGAGAGTACTTTGAGACAGGAGGGAGTGCTAGAGTTTGGGGTAAAACCACAGCAGCTCATG-CACTTGGATATCT-GTGAG-C-C---- -GAGGTTA-GTGCT--GTGGAGAGTAC-TGGAGACAGGAGGGAGTGCTAGAG-TTGGGGT-AAAGCACAGCA-CCATTCACTGATAAATGTCAGGCCTAGGGG---- --GAGGTA-TTGCT--GTGGAGGGTAC-TGGAGACAGGA-GGAGTGCTAGAGGTTGGGGTAAAACCACAGCAGCTCAT-TTACTT-GAT-ACT-GTCAGGCTC-AGG -GAGGTTATTTGCT--GTGGAGAGTTACT-GAGACA--TGGG-GTGCCA-AG-TT-GGGT--AGCTACAGCAGCTCATTTCACTT-GAT-ACT-G-CAGGCTCTCAG --GAGTTAATTTC---GTGGAGAGTACTAGAGCACAGGAGGGAG-GCCAGA--TTGGGGT-ATACCACAGCAGCTCGT-TCACTT---TAACT-GTCAGGC-CCTCA ACAGTTTAATTGATGGGCGGAGAGTAC-TGGAGACAGGAGGGAGTGCTAGAG--TGGGGT-AAACCACAGCAGCATCTTTCA-TT--ATAACT-GTCAG-------- CAAGGTT-TTTTCGCTGTGGAGAGTAC-TGGAGAC-CG-GGGAGTG-TAGACTTTGGGGT---ATCAC-GTAG--CAGCTTATTTCG--ACTTTGT-A--CT-GTAA --GAGTTA-TTTCT--GTGGAGAGAAC-TGGAGAC-GGAGGGAGTGCTAGAG-TTGGGGT-AAACACCAGGCAGCCATTTCACTT-GATAACT-GTCAGGC-C--TT
说明/提示
约束条件
- s1,…,sm 均为由 A、C、G、T 组成的字符串。
- small 测试用例:
- 8≤m≤10
- 80≤∣s1∣,…,∣sm∣≤100(∣x∣ 表示字符串 x 的长度)
- large 测试用例:
- 35≤m≤40
- 700≤∣s1∣,…,∣sm∣≤750
计分方式
提交的程序会根据“约束条件”中的 small 和 large 两类测试用例进行评测。small 有 2 个用例,large 有 8 个用例。仅在规定时间内输出格式正确的结果才会被计分。small 用例每个得分为 max{200−⌊Call(S)∗0.2⌋,0},large 用例每个得分为 max{700−⌊Call(S)∗0.1⌋,0}。例如,若仅在规定时间内完成了 2 个 small 用例,则得分为 $ \max{200 - \lfloor C_{all}(S_1) * 0.2 \rfloor, 0} + \max{200 - \lfloor C_{all}(S_2) * 0.2 \rfloor, 0}(S_1, S_2$ 分别为两个用例的输出)。
不能保证最优解能达到满分(4500 或 6000 分)。最终排名将在赛后用另一组数据评测。当前评测系统和赛后评测数据的生成方式相同。
数据生成方式
从参考基因组(人类第 22 号染色体)中截取部分子串 s,仅包含 A、T、G、C 的区域。对截取的子串模拟测序仪的读取错误(插入、缺失、替换),生成字符串 s′。重复多次,组成一个测试用例。测试用例不包含 s。具体的错误模拟方式不公开,测试数据可从以下链接下载:
问题背景
※ 本节为出题背景,不影响解题,可选阅读。
多序列比对(Multiple Alignment)与成对比对(Pairwise Alignment)一样,在基因组序列分析的多个场景中都有应用。以病毒变异分析为例:
当感染病毒后,体内会产生大量病毒拷贝,同时 DNA 或 RNA 也会被复制。由于复制精度不是 100%,每次复制都会产生各种变异(替换、插入、缺失等),导致产生许多基因组序列略有不同但大致相似的病毒。通过比较这些略有差异但大致相似的序列,分析变异特征,多序列比对就非常有用。
此外,多序列比对还可用于测序仪读取片段的错误纠正。读取基因组时,为了便于后续修正测序错误,会对基因组同一位置进行多次重复读取。得到的片段序列会包含不同的错误,但通过多序列比对并对每一列进行多数投票,可以纠正这些错误。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?