#include #include #include <unordered_map> #include #include using namespace std;

int reverse(char n) { //将对应的碱基对转换为数字 if (n == 'A') { return 0; } else if (n == 'C') { return 1; } else if (n == 'G') { return 2; } else { return 3; } }

vector all_reverse(string s, int m) {
vector t; s = s.substr(s.length() - m); for (char i : s) { t.push_back(reverse(i)); } return t; }

int count_list(int one, vector& list1, int r, int su) { list1.erase(list1.begin(), list1.begin() + r); if (one == 0) { su = 0 + su; } else if (one == 1) { su = count(list1.begin(), list1.end(), 0) + su; } else if (one == 2) { su = count(list1.begin(), list1.end(), 0) + count(list1.begin(), list1.end(), 1) + su; } else { su = count(list1.begin(), list1.end(), 0) + count(list1.begin(), list1.end(), 1) + count(list1.begin(), list1.end(), 2) + su; } return su; }

string fun3(unordered_map<string, int>& dict, int value) { //根据字典的结果来判断相应的字典的名称 vector t; for (auto p : dict) { if (p.second == value) { t.push_back(p.first); } } for (string i : t) { return i; } return ""; }

vector fun2(vector& list_origin, vector& list_test) { int num1 = 1; vector list1; unordered_map<string, int> dict1; vector list_aim; for (string q : list_origin) { dict1[q] = num1; num1 += 1; }

for (int e : list_test) {
    int r = dict1[list_origin[e]];
    list1.push_back(r);
}
sort(list1.begin(), list1.end());
for (int i : list1) {
    string y = fun3(dict1, i);
    list_aim.push_back(y);
}
return list_aim;

}

void fun(unordered_map<string, int>& dict, int value, vector& h) { //判断元素是否有重叠 vector t; for (auto p : dict) { if (p.second == value) { t.push_back(p.first); } } vector t2 = fun2(h, t); string h2 = ""; for (string i : t2) { h2 += i + "\n"; dict.erase(i); } dict[h2] = value; }

string clean_num(string a) { string res = ""; for (char i : a) { if (isdigit(i) == false) { res += i; } } return res; }

int main() { vector<vector> t; vector p; vector h; set yy; int r2 = 1; int r = 0; int su = 0; unordered_map<string, int> dict; int m, n; cin >> m >> n;

for (int o1 = 0; o1 < n; o1++) { //将DNA转化为数字,存放于列表中
    string a;
    cin >> a;
    a = to_string(r2) + a;
    h.push_back(a);
    t.push_back(all_reverse(a, m));
    r2 += 1;
}

for (vector<int> i1 : t) {  //计算逆序对
    for (int i2 : i1) {
        vector<int> list1 = i1;
        r += 1;
        su = count_list(i2, list1, r, su);
    }
    p.push_back(su);
    r = 0;
    su = 0;
}

for (int i3 = 0; i3 < n; i3++) {
    dict[h[i3]] = p[i3];
}

for (int uu : dict) {
    string str_uu = to_string(uu);
    yy.insert(str_uu);
}

for (string l : yy) {
    int int_l = stoi(l);
    fun(dict, int_l, h);
}

vector<pair<string, int>> o(dict.begin(), dict.end());
sort(o.begin(), o.end(), [](auto const& p1, auto const& p2) {
    return p1.second < p2.second;
});

for (auto u : o) {
    string id = u.first;
    int numb = u.second;
    cout << clean_num(id) << endl;
}

return 0;
请把以下代码改写为c++语言:def reversen #将对应的碱基对转换为数字 if n == A return 0 elif n == C return 1 elif n == G return 2 else return 3 def all_reversesm t = s = s-m

原文地址: https://www.cveoy.top/t/topic/fjql 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录