QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#165492#6563. Four SquarePhantomThreshold#AC ✓2ms3520kbC++202.2kb2023-09-05 18:48:582023-09-05 18:49:02

Judging History

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

  • [2023-09-05 18:49:02]
  • 评测
  • 测评结果:AC
  • 用时:2ms
  • 内存:3520kb
  • [2023-09-05 18:48:58]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<ll,ll> pii;
/*
ll pw(ll a,ll x){
	ll ret=1;
	for (;x;x>>=1,a=a*a) if (x&1) ret=ret*a;
	return ret;	
}
*/
ll sq(ll x){
	ll sz=sqrt(x);
	for (;(sz+1)*(sz+1)<=x;) sz++;
	for (;sz*sz>x;) sz--;
	return sz;
}

pii a[10];

int main(){
	for (int i=1;i<=4;i++){
		ll w,h;
		cin >> w >> h;
		if (w<h) swap(w,h);
		a[i]=make_pair(w,h);	
	}
	sort(a+1,a+4+1,
		[&](const pii &A,const pii &B){
			return A>B;	
		}
	);
	ll area=0;
	for (int i=1;i<=4;i++) area+=a[i].first*a[i].second;
	ll sz=sq(area);
	
//	cerr << "sz,area : " << sz << " " << area << "\n";
	
	if (sz*sz!=area){
		cout << 0 << "\n";
		return 0;	
	}
	
	ll pos=0;
	for (int i=1;i<=4;i++) if (a[i].first==sz) pos=i;
	if (pos!=0){
		ll m=sz;
		for (int i=1;i<=pos;i++) m-=a[i].second;
		ll n=sz;
		
		vector<pii> res;
		for (int i=pos+1;i<=4;i++){
			if (a[i].first==m) n-=a[i].second;
			else if (a[i].second==m) n-=a[i].first;
			else{
				res.emplace_back(a[i]);
			}
		}
		if (res.size()==0){
			cout << 1 << "\n";
			return 0;	
		}
		if (res.size()==2){
			auto X=res[0];
			auto Y=res[1];
			if (X.second==n) swap(X.first,X.second);
			if (Y.second==n) swap(Y.first,Y.second);
			if (X.first==n && Y.first==n && X.second+Y.second==m){
				cout << 1 << "\n";
				return 0;
			}	
		}
		cout << 0 << "\n";
		return 0;
	}
	else{
		sort(a+1,a+4+1,
			[&](const pii &A,const pii &B){
				return A<B;	
			}
		);
		vector<pii> b(10);
		do{
			for (int mask=0;mask<(1<<4);mask++){
				for (int i=1;i<=4;i++){
					b[i]=a[i];
					if ((mask>>(i-1))&1){
						swap(b[i].first,b[i].second);
					}
				}
				/*
				cerr << "---------" << endl;
				for (int i=1;i<=4;i++){
					cerr << b[i].first << " " << b[i].second << "\n";	
				}
				*/
				if (b[1].first+b[2].first!=sz) continue;
				if (b[1].second!=b[2].second) continue;
				if (b[3].first+b[4].first!=sz) continue;
				if (b[3].second!=b[4].second) continue;
				if (b[1].second+b[3].second!=sz) continue;
				cout << 1 << "\n";
				return 0;
			}
		}while (next_permutation(a+1,a+4+1));
		cout << 0 << "\n";
	}
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3460kb

input:

1 1
1 1
1 1
1 1

output:

1

result:

ok single line: '1'

Test #2:

score: 0
Accepted
time: 1ms
memory: 3496kb

input:

3 1
3 3
2 2
3 3

output:

0

result:

ok single line: '0'

Test #3:

score: 0
Accepted
time: 1ms
memory: 3468kb

input:

2 8
2 8
2 8
2 8

output:

1

result:

ok single line: '1'

Test #4:

score: 0
Accepted
time: 1ms
memory: 3404kb

input:

5 3
5 5
3 3
3 5

output:

1

result:

ok single line: '1'

Test #5:

score: 0
Accepted
time: 1ms
memory: 3520kb

input:

1 2
4 8
16 32
64 128

output:

0

result:

ok single line: '0'

Test #6:

score: 0
Accepted
time: 1ms
memory: 3412kb

input:

4 4
2 1
4 4
2 1

output:

0

result:

ok single line: '0'

Test #7:

score: 0
Accepted
time: 1ms
memory: 3428kb

input:

995 51
559 565
154 536
56 780

output:

0

result:

ok single line: '0'

Test #8:

score: 0
Accepted
time: 0ms
memory: 3368kb

input:

391 694
540 42
240 937
691 246

output:

0

result:

ok single line: '0'

Test #9:

score: 0
Accepted
time: 1ms
memory: 3464kb

input:

519 411
782 710
299 45
21 397

output:

0

result:

ok single line: '0'

Test #10:

score: 0
Accepted
time: 1ms
memory: 3404kb

input:

96 960
948 18
108 82
371 576

output:

0

result:

ok single line: '0'

Test #11:

score: 0
Accepted
time: 1ms
memory: 3384kb

input:

3 2
4 3
3 1
1 4

output:

0

result:

ok single line: '0'

Test #12:

score: 0
Accepted
time: 1ms
memory: 3400kb

input:

4 3
1 2
4 4
3 2

output:

0

result:

ok single line: '0'

Test #13:

score: 0
Accepted
time: 1ms
memory: 3380kb

input:

4 4
1 3
5 4
2 5

output:

0

result:

ok single line: '0'

Test #14:

score: 0
Accepted
time: 1ms
memory: 3468kb

input:

1000 1000
1000 1000
1000 1000
1000 1000

output:

1

result:

ok single line: '1'

Test #15:

score: 0
Accepted
time: 1ms
memory: 3520kb

input:

1000 999
998 1000
997 1000
997 997

output:

1

result:

ok single line: '1'

Test #16:

score: 0
Accepted
time: 1ms
memory: 3380kb

input:

1 3
3 3
3 3
4 7

output:

1

result:

ok single line: '1'

Test #17:

score: 0
Accepted
time: 1ms
memory: 3420kb

input:

2 5
5 4
7 1
6 2

output:

1

result:

ok single line: '1'

Test #18:

score: 0
Accepted
time: 1ms
memory: 3416kb

input:

12 2
12 7
7 12
16 4

output:

1

result:

ok single line: '1'

Test #19:

score: 0
Accepted
time: 2ms
memory: 3432kb

input:

7 2
2 14
5 14
7 12

output:

1

result:

ok single line: '1'

Test #20:

score: 0
Accepted
time: 1ms
memory: 3416kb

input:

32 36
5 1
1 37
35 5

output:

1

result:

ok single line: '1'

Test #21:

score: 0
Accepted
time: 1ms
memory: 3404kb

input:

28 30
30 1
31 1
2 30

output:

1

result:

ok single line: '1'

Test #22:

score: 0
Accepted
time: 1ms
memory: 3424kb

input:

66 68
9 11
7 66
9 64

output:

1

result:

ok single line: '1'

Test #23:

score: 0
Accepted
time: 1ms
memory: 3404kb

input:

59 44
25 44
40 32
40 52

output:

1

result:

ok single line: '1'

Test #24:

score: 0
Accepted
time: 0ms
memory: 3500kb

input:

4 4
2 3
4 2
3 2

output:

1

result:

ok single line: '1'