我是靠谱客的博主 霸气小伙,最近开发中收集的这篇文章主要介绍【CF1047D】Little C Loves 3 II【构造】【赛瓦维斯特定理】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

传送门

题意:给一个 N × M N times M N×M的空棋盘,每次选取两个曼哈顿距离为3的空格子放上棋子,问最多能放多少个。

1 ≤ N , M ≤ 1 e 9 1 leq N,M leq 1e9 1N,M1e9

暴力讨论

假装 N ≤ M N leq M NM

N = 1 N=1 N=1

容易得到,详见代码

N = 2 N=2 N=2

构造几组小的(0表示空)

2 × 2 2times2 2×2
0 0
0 0

2 × 3 2 times 3 2×3
1 0 2
2 0 1

2 × 4 2 times 4 2×4

1 2 3 4
3 4 1 2

2 × 5 2 times 5 2×5
1 3 2 4 3
5 4 1 5 2

2 × 6 2 times 6 2×6

1 2 3 1 2 3
4 5 6 4 5 6

2 × 7 2 times 7 2×7

1 2 3 1 2 3 0
4 5 6 4 5 6 0

小凯定理 赛瓦维斯特定理,由4和5拼起来最大不能凑出 4 × 5 − 4 − 5 = 11 4 times 5-4-5=11 4×545=11,即11以上的都能凑出

8 = 4 + 4 , 9 = 4 + 5 , 10 = 5 + 5 , 11 = 5 + 6 8=4+4,9=4+5,10=5+5,11=5+6 8=4+4,9=4+5,10=5+511=5+6

所以除了 2 , 3 , 7 2,3,7 2,3,7都可以填满

N > 2 N>2 N>2, N M NM NM为偶数

首先上面凑出了 2 × 4 2times 4 2×4

两个 2 × 3 2 times 3 2×3凑出 3 × 4 3times 4 3×4

这样最大不能凑出 2 × 3 − 2 − 3 = 1 2times 3-2-3=1 2×323=1,所以所有 4 × M 4times M 4×M都可以凑出来

M M M 1 × 6 1 times 6 1×6凑出 6 × M 6 times M 6×M

以两个为单位,所有都可以凑出

所以偶数都可以填满

N > 2 N>2 N>2, N M NM NM为奇数

首先必须空一格

3 × 3 3 times 3 3×3

1 2 4
4 0 3
3 1 2

把它从角落上挖掉,剩下的都是偶数……

等等,是5怎么办?

构造啊

3 × 5 3 times 5 3×5

1 2 3 4 5
6 7 5 6 7
0 1 2 3 4

5 × 5 5 times 5 5×5

1 2 3 4 5
6 4 1 2 3
7 8 0 7 8
10 11 12 9 5
6 9 10 11 12

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
if (n>m) swap(n,m);
switch(n)
{
case 1:cout<<m/6*6+2*max(m%6-3,0);break;
case 2:
switch(m)
{
case 2:cout<<0;break;
case 3:cout<<4;break;
case 7:cout<<12;break;
default:cout<<2*m;break;
}
break;
default:cout<<1ll*n*m/2*2;break;
}
return 0;
}

最后

以上就是霸气小伙为你收集整理的【CF1047D】Little C Loves 3 II【构造】【赛瓦维斯特定理】的全部内容,希望文章能够帮你解决【CF1047D】Little C Loves 3 II【构造】【赛瓦维斯特定理】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部