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;}