tahongan567
Rating
-
Bài tập
3
Điểm
520
Rating #
-
Điểm #
21694
Giới thiệu
include <iostream>
include <fstream>
include <vector>
include <unordered_map>
include <algorithm>
using namespace std;
// Hàm đọc dữ liệu từ file
void read_input(const string &filename, vector<string> &strings, int &n, int &k) {
ifstream infile(filename);
infile >> n >> k;
strings.resize(n);
for (int i = 0; i < n; ++i) {
infile >> strings[i];
}
infile.close();
}
// Hàm ghi kết quả ra file
void write_output(const string &filename, int result) {
ofstream outfile(filename);
outfile << result << endl;
outfile.close();
}
// Hàm đếm số cặp tương thích
int count_compatible_pairs(const vector<string> &strings, int k) {
unordered_map<int, vector\<int>> length_groups;
// Nhóm xâu theo độ dài
for (int i = 0; i < strings.size(); ++i) {
length_groups[strings[i].length()].push_back(i);
}
int total_pairs = 0;
// Xử lý từng nhóm xâu theo độ dài
for (const auto &entry : length_groups) {
const vector<int> &indices = entry.second;
int count = indices.size();
// Đếm số cặp tương thích
for (int i = 0; i < count; ++i) {
for (int j = i + 1; j < count && indices[j] - indices[i] <= k; ++j) {
++total_pairs;
}
}
}
return total_pairs;
}
int main() {
int n, k;
vector<string> strings;
// Đọc dữ liệu đầu vào
read_input("SEQSTR.INP", strings, n, k);
// Tính số cặp tương thích
int result = count_compatible_pairs(strings, k);
// Ghi kết quả ra file
write_output("SEQSTR.OUT", result);
return 0;
}