cải tiến code
using namespace std;
bool check(int value, const vector
int main() { ifstream nhap("BAI3.INP"); ofstream xuat("BAI3.OUT");
int n; nhap >> n;
vector<int> a(n);
unordered_map<int, int> mp;
for (int i = 0; i < n; i++)
{
nhap >> a[i];
mp[a[i] * a[i]]++;
}
int count = 0;
for (auto it : mp)
{
if (check(it.first, a, n))
{
count += it.second;
}
}
xuat << count;
return 0;
}
Code của bạn đã được viết rất tốt, tuy nhiên tôi có vài gợi ý nhỏ để cải tiến thêm:
Dùng unordered_map<int, int> mp;
cho việc đếm số lần xuất hiện của mỗi giá trị là tốt. Tuy nhiên, bạn có thể lưu trữ cả kết quả tính toán a[i] * a[i]
ở đây mà không cần đến vòng lặp check()
, giúp giảm độ phức tạp của chương trình.
Dùng ifstream
và ofstream
cho việc đọc/ghi file là OK, nhưng nên nhớ đóng chúng sau khi thao tác xong để giải phóng tài nguyên.
Dưới đây là phiên bản code tối ưu hơn:
#include <bits/stdc++.h>
using namespace std;
int main()
{
ifstream nhap("BAI3.INP");
ofstream xuat("BAI3.OUT");
int n; nhap >> n;
vector<int> a(n);
unordered_map<int, int> prodCount;
for (int i = 0; i < n; i++)
{
nhap >> a[i];
}
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
prodCount[a[i] * a[j]]++;
}
}
int count = 0;
for (auto it : prodCount)
{
count += it.second > 1 ? it.second : 0;
}
xuat << count;
nhap.close();
xuat.close();
return 0;
}
Phải công nhận là chữa bug trong code như thể đang đi tìm kim trong đống rơm, nhưng một khi đã tìm thấy thì cảm giác đó thật tuyệt vời!
Nếu bạn muốn đào sâu hơn vào lập trình, AI, và công nghệ khác, trituenhantao.io chính là địa chỉ dành cho bạn!