N-41. Gene Pattern
二更:2020.4.27
读入其实可以这样读:
int cnt = 1;
while (scanf("%d", &a[cnt][1])!= EOF) {
for (int i = 2; i <= n; i++) scanf("%d", &a[cnt][i]);
cnt++;
}
cnt--;
我一直以为while(scanf) 和while (scanf!=EOF)没有区别 , 哭。
这样在devC++里面就可以按CTRL-z强制结束程序得出结果了。
Description
转座子指一段可以从原位上单独复制或断裂下来,环化后插入另一位点,并对其后的基因起调控作用的DNA序列,即转座子在基因序列中没有特定位置。已知某原核生物的某段基因中含有一个转座子。现给出多个个体相关基因序列(用连续正整数编号基因片段),设计程序找出转座子。
Input
第一行,一个数字n,表示相关基因序列所含有基因片段的个数。
第i(100>=i>=2)行,每行n个数字,表示第(i-1)个个体相关基因序列。
Output
一个数字,即转座子对应编号。若无法确定转座子,输出“-1”.
思路:这个题的输入也太离谱了,一年来不管是写c语言题还是算法题都没见过这样输入的
读入就强制读入一个100 行 n 列 的二维矩阵, 根据每行第一个数是否为0来找出有效行有多少行
for (int i = 1; i <= 100; i++) {
for (int j = 1; j <= n; j++) scanf("%d", &a[i][j]);
}
我们把这个题用逆序数的思想转化:
比如说:正确的序列是 3 2 4 5 6 9 8 10 7 1
我们令b[3] = 1 , b[2] = 2 , ... , b[1] = 10;
这样我们就可以记录元素间顺序:
b[3] < b[2] 3在2的前面
b[2] < b[4] 2在4 的前面
...
那么b数组就可以记录正确的顺序关系
我们假设有一个错误的序列
3 2 7 4 5 6 9 8 10 1
在这里其他数都满足b[a[i][j]] < b[a[i][j+1]]的顺序,只有 7 和 4,b[7] > b[4] 但是在该序列中7却在4的前面,这样就产生了一个逆序对;那么要么是7是转座子。要么是4是转座子,我们把它们的可疑度 c[7], c[4]加上1;
处理完所有行之后,可疑度最大的数就是转座子。
如果有多个数可疑度一样,那么它们都有可能是转座子,我们输出-1;
后来发现,定序的时候不是正确的序列也可以。
就是说用3 2 4 5 6 9 8 10 7 1
或者 3 2 7 4 5 6 9 8 10 1
定序都是可以的。
所以说我们默认用第一行定序
#include <stdio.h>
#include <math.h>
int a[110][110] = {0}, b[110] = {0}, c[110] = {0}, max = 0, ans = 0;
int main () {
int n, cnt = 1, cnt2 = 0;
scanf("%d", &n);
for (int i = 1; i <= 100; i++) {
for (int j = 1; j <= n; j++) scanf("%d", &a[i][j]);
}
for (int i = 1; i <= 100; i++ ) if (a[i][1] != 0 && a[i+1][1] == 0 ) cnt = i; // cnt是有效的行数
for (int i = 1; i <= n; i++) b[a[1][i]] = i;
for (int i = 1; i <= cnt; i++) {
for (int j = 1; j < n; j++) {
if (b[a[i][j]] > b[a[i][j + 1]]) c[a[i][j]]++, c[a[i][j + 1]]++; // 存在一个逆序,这个逆序对的两个数都有嫌疑
}
}
for (int i = 1; i <= n; i++) {
if(c[i] > max) max = c[i], ans = i;
}
for (int i = 1; i <= n; i++) {
if (c[i] == max) cnt2++; // 总共有多少个数可疑度相同
}
if (cnt2 > 1 || ans == 0) printf("-1\n");
else printf("%d\n", ans);
return 0;
}
本文作者:misasteria
本文链接:https://www.cnblogs.com/misasteria/p/16171767.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步