1 条题解

  • 0
    @ 2025-10-26 19:22:15

    简单数学 有一边平行=>两种情况:底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)%mod*m%mod;
    sum+=2*(n-2)%mod*(m-1)%mod*n%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
    上传者