• [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();
    }
    
  • 相关阅读:
    (转)Java垃圾回收机制
    ThreadPoolExecutor线程池参数说明
    深入Synchronized和java.util.concurrent.locks.Lock的区别详解
    java集合类说明及区别
    JAVA中堆栈和内存分配
    深入理解Java对象序列化
    Java 序列化Serializable
    transient在java中的作用
    let和const命令
    第9章 css3多列布局
  • 原文地址:https://www.cnblogs.com/mollnn/p/14661522.html
Copyright © 2020-2023  润新知