单点时限: 2.0 sec
内存限制: 256 MB
xxtt 上大学以来一直在苦恼一件事情,就是学校食堂里,互不认识的同学,或者是异性同学之间,都不愿意坐的很近。于是,原本食堂里那么多的座位,却常常让他找不到座位。
假设食堂里的座位是一个 N×M 的矩阵,当一个座位上有人坐着的同时,他的前后左右(即矩阵的上下左右)将不会再有人愿意去坐。xxtt 在食堂吃不到饭的同时,很好奇,如果大家遵守上面的规定,最多能有多少人能同时吃饭。
输入格式
只有两个整数 N,M (1≤N≤9,1≤M≤9)。
输出格式
输出一个数,表示这个食堂最多能做多少人。
样例
input
2 2
output
2
input
6 4
output
12
/*
思路:bfs标记
*/
#include<iostream>
#include<queue>
using namespace std;
int x[4]={1,-1,0,0};
int y[4]={0,0,1,-1};
int visit[9][9]={0};
int m,n;
bool text(int a,int b)
{
if(a<0||b<0||a>=m||b>=n||visit[a][b])
return false;
return true;
}
int main()
{
cin>>m>>n;
int ans=0;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(visit[i][j]==0)
{
ans++;
for(int z=0; z<4; z++)
{
int a=x[z]+i;
int b=y[z]+j;
if(text(a,b))
{
visit[a][b]=1;
}
}
}
}
}
cout<<ans;
return 0;
}
数学找规律:
int sum=(m/2)*n;
if(m%2==1&&n%2==1){
sum+=n/2+1;
}
else if(m%2==1&&n%2==0){
sum+=n/2;
}