LRJ 3-7

#define _CRT_SECURE_NO_WARNINGS 

#include <cstdio>

int main()
{
    int T;
    int m, n;
    char dna[55][1005]; // 4 <= m <= 50, 4 <= n <= 1000

    scanf("%d", &T);
    while (T--) {
        scanf("%d%d", &m, &n);
        for (int i = 0; i < m; i++) {
            scanf("%s", dna[i]);
        }
        /*
        for (int i = 0; i < m; i++) {
            printf("%s\n", dna[i]);
        }
        */
        char ans[1005]; // 4 <= n <= 1000
        int cnt[4]; // count for ‘A‘, ‘C‘, ‘G‘, ‘T‘ in a column
        int max;
        char maxChar;

        // scan each column, select the character which occurs the most time,
        // if there is a tie, select the lexicographically smaller one
        for (int j = 0; j < n; j++){ 

            cnt[0] = cnt[1] = cnt[2] = cnt[3] = max = 0;

            for (int i = 0; i < m; i++){
                switch (dna[i][j]){
                case ‘A‘: {
                    cnt[0]++;
                    if (cnt[0] > max || (cnt[0] == max && maxChar > ‘A‘)){
                        max = cnt[0];
                        maxChar = ‘A‘;
                    }
                    break;
                }
                case ‘C‘: {
                    cnt[1]++;
                    if (cnt[1] > max || (cnt[1] == max && maxChar > ‘C‘)){
                        max = cnt[1];
                        maxChar = ‘C‘;
                    }
                    break;
                }
                case ‘G‘: {
                    cnt[2]++;
                    if (cnt[2] > max || (cnt[2] == max && maxChar > ‘G‘)){
                        max = cnt[2];
                        maxChar = ‘G‘;
                    }
                    break;
                }
                case ‘T‘: {
                    cnt[3]++;
                    if (cnt[3] > max){
                        max = cnt[3];
                        maxChar = ‘T‘;
                    }
                    break;
                }
                }

            }

            ans[j] = maxChar;
        }
        ans[n] = ‘\0‘;
        printf("%s\n", ans);

        // count the total Hamming distance
        int h_dis = 0;
        for (int i = 0; i < m; i++){
            for (int j = 0; j < n; j++){
                if (dna[i][j] != ans[j])
                    h_dis++;
            }
        }
        printf("%d\n", h_dis);
    }

    return 0;
}
时间: 2024-10-11 04:56:34

LRJ 3-7的相关文章

lrj计算几何模板

整理了一下大白书上的计算几何模板. 1 #include <cstdio> 2 #include <algorithm> 3 #include <cmath> 4 using namespace std; 5 //lrj计算几何模板 6 struct Point 7 { 8 double x, y; 9 Point(double x=0, double y=0) :x(x),y(y) {} 10 }; 11 typedef Point Vector; 12 const

// 62.是否有利润奖--lrj private boolean isProfitsAward; // 63.利润奖--lrj_price private String profitsAward;

// 62.是否有利润奖--lrj private boolean isProfitsAward; // 63.利润奖--lrj_price private String profitsAward; 如果 这二个名称相同(profitsAward,isProfitsAward),报错,getIs,setIs public boolean getIsProfitsAward() { return isProfitsAward; } public void setIsProfitsAward(boo

C++语言学习——LRJ入门经典笔记

1.scanf的输入格式,空格.TAB和回车符都是无关紧要,所以按Enter键并不意味着输入结束. 告诉程序输入结束的方式: 在windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter键. 在linux下,输入完毕后按Ctrl+D键 2.gcc 编译选项 -Wall指出警告 -ansi 判断是否和ANSI冲突 -pedantic 比ansi更加严格 -lm 链接数学库, C++编译器会自动链接 -DDEBUG 编译时定义符号DEBUG,可以换成其它,如-DLOCAL将

lrj紫书第五章

UVA-1592 1 // UVa1592 Database 2 // Rujia Liu 3 // 本程序只是为了演示STL各种用法,效率较低.实践中一般用C字符串和哈希表来实现. 4 5 #include<iostream> 6 #include<cstdio> 7 #include<vector> 8 #include<string> 9 #include<map> 10 #include<sstream> 11 using n

Uva 122 树的层次遍历 Trees on the level lrj白书 p149

是否可以把树上结点的编号,然后把二叉树存储在数组中呢?很遗憾如果结点在一条链上,那将是2^256个结点 所以需要采用动态结构 首先要读取结点,建立二叉树addnode()+read_input()承担这样的工作 然后遍历二叉树,读取结点编号输出bfs() 这道题有内存池应用的背景 附链接  http://blog.csdn.net/shawngucas/article/details/6574863 #include <cstdio> #include <cstring> #inc

LRJ

//3-1 1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include <cstdio> 4 5 int main() 6 { 7 int T; 8 char score[85]; 9 scanf("%d", &T); 10 while (T-- > 0) { 11 scanf("%s", score); 12 int sum = 0; 13 int num = 1; 14 char prev = 'X';

【枚举】【lrj黑书】奇怪的问题(古老的智力题)

题目描述: 请回答下面的 10 个问题,你的回答应保证每题惟有你的选择是正确的. ⑴ 第一个答案是b 的问题是哪一个?(a )2 ( b ) 3 ( c ) 4 ( d ) 5 ( e ) 6⑵ 恰好有两个连续问题的答案是一样的,它们是:( a ) 2 , 3 ( b ) 3, 4 ( c ) 4 ,5 ( d ) 5 ,6 ( e ) 6 ,7 ⑶ 本问题答案和哪一个问题的答案相同?( a ) 1 ( b ) 2 ( c ) 4 ( d ) 7 ( e ) 6⑷ 答案是a 的问题的个数是:(

lrj 9.4.1 最长上升子序列 LIS

p275 d(i)是以Ai为结尾的最长上升子序列的长度 <算法竞赛入门经典-训练指南>p62 问题6 提供了一种优化到 O(nlogn)的方法. 在O(nlogn)的算法分析中(从“假设已经计算出的两个状态...”开始), 用g(i)表示d值为i的最小状态编号,状态编号就是数组下标 g(1) <= g(2) <= g(3) <= ... <= g(n) 可以用反证法: 假设 i < j, g(i) > g(j) g(j)代表 d(x) = j 的最小 x,对

lrj 9.2.3

int INF = -(1<<30); // 记忆化搜索 min[0] = 0; int dp(int i) { if(maxv[i] != -1) return maxv[i]; maxv[i] = -INF; for(int j = 1; j <= n; j++) if(i >= V[j]) maxv[i] = max(maxv[i], dp(i-V[j]) + 1); return maxv[i]; } printf("%d\n", dp[S]); //