解题思路

这是一个数学问题,可以通过分析网格的特性得到简单的数学公式。

关键点:

  1. 当宽度或高度是4的倍数时,可以完美平铺
  2. 其他情况下需要额外考虑边界
  3. 最终结果与面积有关

算法步骤:

  1. 判断宽度或高度是否为4的倍数
  2. 根据不同情况使用对应的公式计算

代码

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int cakeNum(int W, int H) {
        if (W % 4 == 0 || H % 4 == 0) {
            return W * H / 2;
        } else {
            return W * H / 2 + 1;
        }
    }
};

int main() {
    int W, H;
    cin >> W >> H;
    
    Solution solution;
    cout << solution.cakeNum(W, H) << endl;
    
    return 0;
}
import java.util.*;

public class Main {
    static class Solution {
        public int cakeNum(int W, int H) {
            if (W % 4 == 0 || H % 4 == 0) {
                return W * H / 2;
            } else {
                return W * H / 2 + 1;
            }
        }
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int W = sc.nextInt();
        int H = sc.nextInt();
        
        Solution solution = new Solution();
        System.out.println(solution.cakeNum(W, H));
        
        sc.close();
    }
}
class Solution:
    def cake_num(self, W: int, H: int) -> int:
        if W % 4 == 0 or H % 4 == 0:
            return W * H // 2
        else:
            return W * H // 2 + 1

# 读取输入
W, H = map(int, input().split())

solution = Solution()
print(solution.cake_num(W, H))

算法及复杂度

  • 算法:数学公式
  • 时间复杂度:
  • 空间复杂度: