0
0
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
#include <iostream>
using namespace std;
int main() {
long long n, m, r, c, res = 0;
cin >> n >> m >> r >> c;
// c += (r % 2 == 0); c = c % 2
c += !(r & 1); c &= 1;
// Tính xem ô đen đầu tiên được sơn ở cột thứ mấy
// (c): đối với hàng lẻ, (r): đối với hàng chẵn
r = (c ? 2 : 1); c = (c ? 1 : 2);
// Ta có: số hàng được đánh số lẻ = (n / 2) + (n % 2) = (n >> 1) + (n & 1)
// và mỗi hàng như vậy sẽ có (m - c) / 2 + 1 = (m - c >> 1) + 1 ô được sơn đen
res += ((n >> 1) + (n & 1)) * ((m - c >> 1) + 1);
// Ta có: số hàng được đánh số chẵn = (n / 2) = (n >> 1)
// và mỗi hàng như vậy sẽ có (m - r) / 2 + 1 = (m - r >> 1) + 1 ô được sơn đen
res += (n >> 1) * ((m - r >> 1) + 1);
cout << res;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin
0
336
0
ok bạn
0
336
0
bạn giải thích ý tưởng được ko :v
0
336
0
đi mà ~~
1210
30631
1160
ok ~~
0
336
0
ok cảm ơn bạn nhìu :3
0
336
0
:v tôi nhận ra là cái code này vượt quá tầm hiểu biết của tôi rồi tôi đăng bài này thêm lần nữa ông code dễ hiểu hơn được ko
60
1932
22
#include <iostream> using namespace std; long long n, m, r, c, res, a[2]; int main() { cin >> n >> m >> r >> c; a[1] = (c + !(r % 2)) % 2; // Tìm ô đầu tiên được sơn đen ở các dòng (lẻ, chẵn) if (a[1] == 0) a[1] = 2; if (a[1] == 1) a[0] = 2; else a[0] = 1; for (int i = 1; i <= n; ++i) { for (int j = a[i % 2]; j <= m; j += 2) res++; } cout << res; } Rút gọn#include <iostream> using namespace std; long long n, m, r, c, res, a[2]; int main() { cin >> n >> m >> r >> c; a[1] = (c + !(r % 2)) % 2; // Tìm ô đầu tiên được sơn đen ở các dòng (lẻ, chẵn) if (a[1] == 0) a[1] = 2; if ... xem thêm