답안 #1037227

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1037227 2024-07-28T11:06:38 Z beaconmc ČVENK (COI15_cvenk) C++14
0 / 100
1 ms 348 KB
#include <bits/stdc++.h>
 
typedef int ll;
#define FOR(i,x,y) for(ll i=x; i<y; i++)
#define FORNEG(i,x,y) for(ll i=x; i>y; i--)
 
using namespace std;



vector<ll> lca(vector<ll> a, vector<ll> b){
	if (a[0]+a[1] < b[0] + b[1]) swap(a,b);
	map<vector<ll>, vector<ll>> prev;
	set<vector<ll>> stuff;
	stuff.insert(a);
	prev[a] = {-1,-1};

	FOR(i,0,30){
		if ((1<<i) & a[0]){
			vector<ll> old = a;
			a[0] -= (1<<i);
			stuff.insert(a);
			prev[a] = old;
		}
		if ((1<<i) & a[1]){
			vector<ll> old = a;
			a[1] -= (1<<i);
			stuff.insert(a);
			prev[a] = old;
		}
	}
	FOR(i,0,30){
		if ((1<<i) & b[0]){
			vector<ll> old = b;
			b[0] -= (1<<i);
			if (stuff.count(b)){
				if ((b[0] == old[0] && old[0] == prev[b][0]) || (b[1] == old[1] && old[1] == prev[b][1])) return old;
				return b;
			}
			
		}
		if ((1<<i) & b[1]){
			vector<ll> old = b;
			b[1] -= (1<<i);
			if (stuff.count(b)){
				if ((b[0] == old[0] && old[0] == prev[b][0]) || (b[1] == old[1] && old[1] == prev[b][1])) return old;
				return b;
			}
			
		}

	}
	return {};
}
int main(){
	ll n;
	cin >> n;

	vector<ll> A(2);
	vector<ll> B(2);
	cin >> A[0] >> A[1] >> B[0] >> B[1];
	
	vector<ll> sus = lca(A,B);

	cout << A[0]+A[1]+B[0]+B[1]-sus[0]*2-sus[1]*2;


}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -