QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#621260 | #7785. Three Rectangles | phuong2222 | WA | 0ms | 3508kb | C++14 | 3.7kb | 2024-10-08 11:41:32 | 2024-10-08 11:41:33 |
Judging History
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();
}
}
詳細信息
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'