Bài Toán Trám Đen trong c++

Đây là đề và bài làm của em.Em có thử và không có vấn đề gì, nhưng khi nộp bài thì sai mất 60% test.Nên lên đây nhờ mọi người xem thử xem em sai chỗ nào.

Ý tưởng của em như này:

  • Số Hình CN nhỏ: (m+1)*(n+1) =m*n+m+n.
  • Số điểm giao nhau (không tính mép ngoài): m*n.
  • Số hạt = Số HCN + Số Điểm giao nhau = 2*m*n+m+n.
    Cái này cũng đưa ra mọi người xem xem có vấn đề gì không.
#include <iostream>
#include <cmath>
using namespace std;
int MN() {
	int k;
	cin >> k;
	if (k < 4) { cout << "-1 -1"; return 0; }
	else for (int m = sqrt(k); m >= 1; m--) {
		for (int n = m; (2 * m * n + m + n + 1) <= (2 * k); n++)
			if ((2 * m * n + m + n + 1) == (2 * k)) {
				cout << m << " " << n << endl;
				return 0;
			}
	}
	cout << "-1 -1" << endl;
	return 0;
}
int main() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) MN();
	return 0;
}

1<= k <= 10^12. Thế k kiểu int có hợp lí không nhỉ?

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?