[ICPC2019西安A] City - 组合

Description

给一个 \(n \times 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;
}

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-10-12
  • 2021-12-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-26
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-30
  • 2021-07-25
  • 2021-06-01
相关资源
相似解决方案