Ranking (as of 2015-06-15): 85 out of 109
Language: C++
/* UVa 11961 - DNA To build using Visual Studio 2012: cl -EHsc -O2 UVa_11961_DNA.cpp */ #include <iostream> #include <set> #include <cstring> using namespace std; const int N_max = 15, nr_nucleotides = 4; const char nucleotides[nr_nucleotides] = {'A', 'C', 'G', 'T'}; struct Dna { char s_[N_max + 1]; bool operator<(const Dna& d) const {return strcmp(s_, d.s_) < 0;} }; int main() { int T; cin >> T; while (T--) { int N, K; cin >> N >> K; Dna d; cin >> d.s_; set<Dna> current; current.insert(d); while (K--) { set<Dna> next; for (set<Dna>::const_iterator ci = current.begin(), ce = current.end(); ci != ce; ++ci) { Dna d = *ci; for (int i = 0; i < N; i++) { char nucleotide = d.s_[i]; for (int j = 0; j < nr_nucleotides; j++) if (nucleotide != nucleotides[j]) { d.s_[i] = nucleotides[j]; if (current.find(d) == ce) next.insert(d); } d.s_[i] = nucleotide; } } current.insert(next.begin(), next.end()); } cout << current.size() << endl; for (set<Dna>::const_iterator ci = current.begin(), ce = current.end(); ci != ce; ++ci) cout << ci->s_ << endl; } return 0; }
No comments:
Post a Comment