1 条题解
-
0
简单数学 有一边平行=>两种情况:底1高2,底2高1, 底2高1: 平行于x轴:(n-1)x(m-2)xmx2 平行于y轴:(n-2)*x(m-1)xnx2 交换n,m即可
底1高2 按理说把上面的和x2即可,但有重复的,需要单独计算 平行于x轴:(m-1)x(m-2)x(n-2)x2 -2是因为有两列与上面重复了 平行于y轴:(n-1)x(n-2)x(m-2)x2 关于取模:数值过大,取末尾的数,要逐一取模,
跟为具体的说,nxm的四条边都可以放但是要注意有重复的情况,对于底为2,高为1的情况:
,当底边平行于m时,我们可以发现对于每一个底为2三角形,都有m个顶点可以选择,于是就有(m-2)xm,注意此时的m为格点数,(m-1)为边长,(m-1-1)为此时可以容纳底边边长为2三角行的数量,这只是一行的情况,由于边长为(n-1),高为1,所以有(m-2)x(m-1)*(n-1),那下边放完了,上边也可以放,所以要乘2,此时经过画图可以发现,此时并没有重复的情况可以出现,那此时当底边平行于m时的情况就讨论完了。下面的情况就和上述的方法一样。下面这张图片是底为1,高为2的情况

#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
int main(){
long long int sum=0,m,n;
scanf("%lld%lld",&m,&n);
sum+=2(n-1)%mod(m-2)%modm%mod;
sum+=2(n-2)%mod(m-1)%modn%mod;
sum+=2(n-1)%mod(n-2)%mod(m-2)%mod;
sum+=2(m-1)%mod(m-2)%mod(n-2)%mod;
printf("%lld",sum%mod);
return 0;
}
- 1
信息
- ID
- 1160
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 2
- 上传者