zoukankan      html  css  js  c++  java
  • [CCPC2020绵阳H] Hide and Seek

    [CCPC2020绵阳H] Hide and Seek - 计数

    Description

    二维格点平面上有两个点,给定这两个点各自离原点的曼哈顿距离以及两点之间的曼哈顿距离,问这两个点有多少种可能的位置 pair。

    Solution

    设原点为 A,并且 (AB le AC),则合法情况讨论如下(基本想法就是固定一个点数另一个点的个数)

    (AB=0)

    (AC,BC) (ans)
    (AC=BC=0) (1)
    (AC=BC>0) (4AC)

    (AB eq 0)

    (BC) (ans)
    (AC-AB) (4(AB+1)(BC+1)-4)
    ((AC-AB,AC+AB) s.t. ((BC-AC+AB) mod 2 =0)) (2(AB-1)+2 imes frac 1 2 (BC-AC+AB+2)=4(AB+AC+BC))
    (AC+AB) (4(AB+1)(AC+1)-4)
    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    int cid = 0;
    
    void solve()
    {
        int d01, d02, d12;
        cin >> d01 >> d02 >> d12;
        if (d01 > d02)
            swap(d01, d02);
        ++cid;
        cout << "Case #" << cid << ": ";
        if (d01 == 0)
        {
            if (d02 == d12)
            {
                if (d02 > 0)
                    cout << 4 * d02 << endl;
                else
                    cout << 1 << endl;
            }
            else
            {
                cout << 0 << endl;
            }
        }
        else
        {
            if (d12 == 0)
            {
                if (d01 == d02)
                    cout << 4 * d01 << endl;
                else
                    cout << 0 << endl;
            }
            else if (d12 < d02 - d01)
            {
                cout << 0 << endl;
            }
            else if (d12 == d02 - d01)
            {
                cout << 4 * (d12 + d01 * (d12 + 1)) << endl;
            }
            else if (d12 == d02 + d01)
            {
                cout << 4 * (d02 + d01 * (d02 + 1)) << endl;
            }
            else if (d12 > d02 + d01)
            {
                cout << 0 << endl;
            }
            else
            {
                if ((d12 - d02 + d01) & 1)
                    cout << 0 << endl;
                else
                    cout << 4 * (d01 + d02 + d12) << endl;
            }
        }
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int t;
        cin >> t;
        while (t--)
            solve();
    }
    
  • 相关阅读:
    营销型站点的建设流程是什么?
    MAC 通过brew安装软件
    Android实现分享内容到微信朋友圈
    C++设计模式之适配器模式(三)
    JEECG平台权限设计
    .Net修改网站项目调试时的虚拟目录(未验证)
    .Net修改网站项目调试时的虚拟目录
    ECharts.js学习动态数据绑定
    百度ECharts
    asp.net loading 动画
  • 原文地址:https://www.cnblogs.com/mollnn/p/14661522.html
Copyright © 2011-2022 走看看