QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#621260#7785. Three Rectanglesphuong2222WA 0ms3508kbC++143.7kb2024-10-08 11:41:322024-10-08 11:41:33

Judging History

你现在查看的是最新测评结果

  • [2024-10-08 11:41:33]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3508kb
  • [2024-10-08 11:41:32]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
using lli = long long;
const int maxN = 1e6 + 5;
const lli Mod = 1e9 + 7;
lli w[4],h[4];
lli res;
void input()
{
    for (int i = 0;i < 4;++i) cin >> h[i] >> w[i];
}
void solve()
{
    lli val = (1 ^ 2 ^ 3);
    res = 1;
    for (int i = 1;i < 4;++i)
    {
        if (w[i] == w[0] && h[i] == h[0])
        {
            for (int j = 1;j < 4;++j)
            if (j != i) res = (res * (((h[0] - h[j] + 1) * (w[0] - w[j] + 1)) % Mod)) % Mod;
            cout << res << "\n";
            return;
        }
    }
    //cerr << "A";
    res = 0;
    for (int i = 1;i < 4;++i)
    {
        for (int j = i + 1;j < 4;++j)
        {
            if (w[i] == w[j] && w[i] == w[0])
            {
                lli k = (val ^ i ^ j);
                lli wd = max(h[0] - h[i] - h[j],0ll);
                if (wd == 0) res = (res + (2 * ((h[0] - h[k] + 1) * (w[0] - w[k] + 1)) % Mod)) % Mod;
                else if (w[k] == w[0]) res = (res + 2 * min({max(h[k] - wd + 1,0ll),h[i] + 1,h[j] + 1,h[0] - h[k] + 1})) % Mod;
                //cerr << i << " " << j << " " << k << " " << 2 * ((h[0] - h[k] + 1) * (w[0] - w[k] + 1)) << " " << res << "A\n";
                //cerr << i << " " << j << " " << k << " " << 2 * min({max(h[k] - wd + 1,0ll),h[i] + 1,h[j] + 1}) << " " << res << "A\n";
            }
            if (h[i] == h[j] && h[i] == h[0])
            {
                lli k = (val ^ i ^ j);
                lli wd = max(w[0] - w[i] - w[j],0ll);
                //cerr << i << " " << j << " " << k << " " << wd << "\n";
                if (wd == 0) res = (res + 2 * ((h[0] - h[k] + 1) * (w[0] - w[k] + 1)) % Mod) % Mod;
                else if (h[k] == h[0]) res = (res + 2 * min({max(w[k] - wd + 1,0ll),w[i] + 1,w[j] + 1,w[0] - w[k] + 1})) % Mod;
                //cerr << i << " " << j << " " << k << " " << wd << " " << 2 * ((h[0] - h[k] + 1) * (w[0] - w[k] + 1))  << " " << res << "\n";
            }
        }
    }
    //cerr << res << "A\n";
    if (h[1] == h[2] && h[2] == h[3] && h[1] == h[0])
    {
        for (int i = 1;i < 4;++i)
            for (int j = i + 1;j < 4;++j)
            {
                lli k = (val ^ i ^ j);
                if (max(w[i],w[j]) + w[k] >= w[0]) res = (res + Mod - 2) % Mod;
            }
    }
    if (w[1] == w[2] && w[2] == w[3] && w[1] == w[0])
    {
        for (int i = 1;i < 4;++i)
            for (int j = i + 1;j < 4;++j)
            {
                lli k = (val ^ i ^ j);
                if (max(h[i],h[j]) + h[k] >= h[0]) res = (res + Mod - 2) % Mod;
            }
    }
    if (res != 0)
    {cout << res << "\n";return;}
    val = (1 ^ 2 ^ 3);
    for (int i = 1;i < 4;++i)
        for (int j = 1;j < 4;++j)
        {
            lli k = (val ^ i ^ j);
            if (h[i] == h[0])
            {
                lli h1 = h[j] + h[k];
                lli w1 = min(w[k],w[j]);
                if (w[0] <= w1 + w[i] && h1 >= h[0])
                {
                    res += 4;
                    break;
                }
            }
            if (w[i] == w[0])
            {
                lli h1 = min(h[j],h[k]);
                lli w1 = w[k] + w[j];
                if (h[0] <= h1 + h[i] && w1 >= w[0])
                {
                    res += 4;
                    break;
                }
            }
        }
    //cerr << "A";
    res = res % Mod;
    cout << res << "\n";
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
//    freopen("P1.inp","r",stdin);
//    freopen("P1.out","w",stdout);
    int t;
    cin >> t;
    for (int i = 1;i <= t;++i)
    {
        input();
        solve();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3508kb

input:

5
2 2
1 1
1 1
1 1
2 2
1 1
1 2
1 2
2 2
1 1
1 2
2 1
2 2
1 2
1 2
1 2
2 2
1 2
1 2
2 1

output:

0
8
8
6
4

result:

wrong answer 3rd numbers differ - expected: '4', found: '8'