Sicily 1035. DNA matching

来源:互联网 发布:linux kvm web控制面板 编辑:程序博客网 时间:2024/05/29 07:42
/*DNA配对,简单的搜索删除而已,一边插入一边就在判断(正反序均判断) *//*Run Time: 0secsRun Memory: 312KB*/#include <iostream>#include <string>#include <set>using namespace std;int N;     //1-100string lists[101];set<string> pool;int num;//获取一个串的配对串 string getPartner(string input){    for(int i=0; i<input.length(); i++){        if(input[i] == 'A')            input[i] = 'T';        else if(input[i] == 'T')            input[i] = 'A';        else if(input[i] == 'C')            input[i] = 'G';        else if(input[i] == 'G')            input[i] = 'C';    }    return input;}//获取一个串的逆序 string getAnti(string input){    char buf[input.length()];    for(int i=input.length()-1,j=0; i>=0; i--,j++)        buf[j] = input[i];    string s(buf, input.length());    return s;}int main(){    int T;        cin >> T;    while (T>0){        num = 0;        cin >> N;        for(int i=0; i<N; i++)            cin >> lists[i];                for(int i=0; i<N; i++){            string buf = lists[i];            set<string>::iterator iter = pool.find(buf);            if(iter != pool.end()){  //说明找到有对应的了,则计数器+1,同时删除曾经插入的序列及其反序列                 num++;                pool.erase(buf);                pool.erase(getAnti(buf));            }else{    //没有找到配对,此时获取当前序列的配对序列,将其本身以及其反序存入pool                 string partner = getPartner(buf);                pool.insert(partner);                pool.insert(getAnti(partner));            }        }        cout << num << endl;                   T--;    }    return 0;}

原创粉丝点击