[ICPC2019西安A] City - 组合
Description
给一个 (n imes m (n,m le 1000)) 网格,问有多少条线段两端是格点,同时中点也是格点。
Solution
普通情况(斜的)可以拆成横的竖的分量独立贡献相乘
其它情况(平的,竖的,一个点的)容斥加加减减
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m;
int solve(int n)
{
int ans = 0;
for (int i = 0; i <= n; i++)
ans += i / 2 + 1;
return ans;
}
signed main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
int ans = solve(n) * solve(m);
cout << 2 * ans + 0 * (n + 1) * (m + 1) - (n + 1) * solve(m) - (m + 1) * solve(n) << endl;
}