본문 바로가기
Problem Solving/ICPC

ACM ICPC World Finals 2012 - Takeover Wars

by hongjun7 2016. 4. 23.

ACM ICPC World Finals 2012 Problem L - 문제 링크

성질 1. 두 개의 원소를 합한 결과가 상대방의 가장 큰 원소보다 크지 않다면 의미가 없다.

성질 2. 상대방의 원소를 제거할거면 가장 큰 원소를 제거하는 수 밖에 없다.

성질 3. 성질 1에 의해서 두 개의 원소를 합할 때에, 가장 큰 두 원소를 합할 수 밖에 없다.

위의 성질들로 아래와 같은 코드를 작성하여 AC.

int f(int n, int m, long long A, long long B, int k) {
if (n == 0) return 0;
if (m == 0) return 1;
if (n <= 1 && A <= B) return 0;
if (n > 1) {
long long x = A;
long long y = a[k][n - 1];
if (x + y > B) {
int res = f(m, n - 1, B, x + y, !k);
if (!res) return 1;
}
}
if (A > B) {
int res = f(m - 1, n, a[!k][m - 1], A, !k);
if (!res) return 1;
}
return 0;
}
int main() {
int T = 1;
while (scanf("%d%d", &N, &M) == 2) {
long long x;
for (int i = 0; i < N; i++) scanf("%lld", &x), a[0][i + 1] = x;
for (int i = 0; i < M; i++) scanf("%lld", &x), a[1][i + 1] = x;
sort(a[0] + 1, a[0] + N + 1);
sort(a[1] + 1, a[1] + M + 1);
int res = f(N, M, a[0][N], a[1][M], 0);
printf("Case %d: %s\n", T++, res ? "Takeover Incorporated" : "Buyout Limited");
}
}


'Problem Solving > ICPC' 카테고리의 다른 글

2016-2017 CT S03E01(BAPC 2010) 연습 결과 및 반성  (0) 2016.09.10
ACPC 2015 연습 결과 및 H. Capital City 풀이  (0) 2016.08.30
2016.6.14  (1) 2016.06.15
ACM ICPC World Finals 2014 - Sensor Network  (0) 2016.04.23
2016 ICPC  (0) 2015.12.22

댓글