以为是水题,可以秒
也确实是水题,但秒不了......
忘了考虑两条单链可能长度不一样的情况...粗心粗心,谨记谨记
用了一条visited[]数组去判断该单链是否匹配过.
// Problem#: 1035
// Author: Reid Chan
#include <iostream>
#include <string>
using namespace std;
bool match(string left, string right)
{
int len = left.length();
char l, r;
if (len != right.length()) {
return false;
}
for (int i = 0; i < len; ++i) {
l = left[i];
r = right[i];
if ((l == 'A' && r == 'T') || (l == 'T' && r == 'A')) {
continue;
} else if ((l == 'C' && r == 'G') || (l == 'G' && r == 'C')) {
continue;
} else {
return false;
}
}
return true;
}
int main() {
int t_cases;
cin >> t_cases;
int lines;
string dna[101];
int visited[101];
while (t_cases--) {
cin >> lines;
for (int i = 0; i < lines; ++i) {
cin >> dna[i];
visited[i] = 0;
}
int pair = 0;
for (int j = 0; j < lines - 1; ++j) {
if (visited[j] == 0) {
for (int k = j + 1; k < lines; ++k) {
if (visited[k] == 0 && match(dna[j], dna[k])) {
visited[j] = 1;
visited[k] = 1;
pair++;
break;
}
}
}
}
cout << pair << endl;
}
return 0;
}