Codeforces Round #511 (Div. 1) T2 Little C Loves 3 II
题目
Little C loves number «3» very much. He loves all things about it.
Now he is playing a game on a chessboard of size . The cell in the -th row and in the -th column is called . Initially, The chessboard is empty. Each time, he places two chessmen on two different empty cells, the Manhattan distance between which is exactly . The Manhattan distance between two cells and is defined as .
He want to place as many chessmen as possible on the chessboard. Please help him find the maximum number of chessmen he can place.
Input
A single line contains two integers and () — the number of rows and the number of columns of the chessboard.
Output
Print one integer — the maximum number of chessmen Little C can place.
Examples
inputCopy
2 2
outputCopy
0
inputCopy
3 3
outputCopy
8
Note
In the first example, the Manhattan distance between any two cells is smaller than , so the answer is .
In the second example, a possible solution is , ,, .
和史前巨佬ldx还有dzy神仙一起做的
这道题…
可以说是打表吧
首先我们可以观察到,对于任意一个或者的格子,都是可以填满的,
那也就说如果有一边长能被6或者4给整除,那就是可以填满的
然后对于5*5以下的了,我们可以直接打表预处理出来(因为有一些特殊情况吧)
然后。。
就被2*7给hack了
然后特判了一个2*7就过了
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int tr[5][5]={ {0,0,0,2,4},
{0,0,4,8,10},
{0,4,8,12,14},
{2,8,12,16,18},
{4,10,14,18,24}};
int main() {
int n,m;
cin>>n>>m;
if(n<m) swap(n,m);
ll ans=0;
if(m==1)ans+=n/6*6,n%=6,ans+=tr[0][n-1];
else if(n%4==0 || m%4==0)ans=(ll)n*m;
else if(n%6==0 || m%6==0)ans=(ll)n*m;
else if(n<=5 && m<=5)ans=tr[n-1][m-1];
else if(n==7 && m==2)ans=12;else ans=(ll)n*m/2*2;
cout<<ans<<'\n';
}
反正dzy神仙带我飞,什么都不怕