时间限制:1秒
空间限制:32768K
热度指数:7500
算法知识视频讲解
题目描述
二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。
对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根
小易想知道最多可以放多少块蛋糕在网格盒子里。
对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根
小易想知道最多可以放多少块蛋糕在网格盒子里。
输入描述:
每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)
输出描述:
输出一个最多可以放的蛋糕数
示例1
输入
3 2
输出
4
#include <bits/stdc++.h> using namespace std; int a[1111][1111]; int main(){ int n, m; cin >> n >> m; int ans = 0, flag = 1; for(int i = 1; i <= n; ++i){ for(int j = 1; j <= m; ++j){ flag = 0; if(i == 1){ if(j > 1){ flag |= a[i][j - 2]; } } else{ flag |= a[i - 2][j]; flag |= a[i][j - 2]; } if(flag == 0){ ans++; a[i][j] = 1; } } } cout << ans << endl; } /* 题意: n*m的网格,距离为2的点对上不可以同时放蛋糕,问最多可以放多少蛋糕。 思路: 贪心即可。扫一遍,可以放就放,维护一下之前的额信息。 */