计数三角形

题意:在n*m的网格中,找至少一边平行x或y的面积为2的三角形个数。

解法:分情况考虑

1、两边平行x和y 1*2 或 2 * 1 矩形 有四个。

2、一边平行x或y 长度为1 或 2.

//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <string>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <string.h>
#include <vector>
#define ME(x , y) memset(x , y , sizeof(x))
#define SF(n) scanf("%d" , &n)
#define rep(i , n) for(int i = 0 ; i < n ; i ++)
#define INF  0x3f3f3f3f
#define mod 1000000007
#define PI acos(-1)
using namespace std;
typedef long long ll ;

int main()
{
    ll n , m  , ans = 0 ;
    cin >> n >> m ;
    ans =ans +  4 * ((n - 1) * (m - 2) % mod+(n - 2) * (m - 1) % mod) % mod;// 1 * 2 + 2 * 1
    ans = ans % mod +  (2 * (n - 1) % mod * (m - 2) % mod * (m - 2) % mod + 2 * (m - 1)%mod * (n - 2)%mod * (n - 2)%mod)%mod;// 一边长为2平行x和平行 y
    ans = ans % mod + (2 * (n - 2) % mod * (m - 1) % mod * (m - 2) % mod + 2 * (m - 2) % mod * (n - 1) % mod * (n - 2) % mod)% mod ;//一边长为1平行x和平行y
    
    cout << ans % mod << endl;
}
原文地址:https://www.cnblogs.com/nonames/p/12266642.html