Skip to Content

Who's Opposite?

Editorial oficial (C++) 

Explicación

Como el número de personas a la izquierda de aa y el número de personas a la derecha de bb deben ser iguales, podemos hallar el número total de personas en el círculo con ab2|a - b| \cdot 2.

A partir de aquí, podemos ver si este círculo es posible con a,b,c>numGroupa, b, c > \texttt{numGroup},

Si alguno de estos supera el número de personas en el círculo, no pueden tener pareja.

En caso contrario, podemos restar o sumar ab|a - b| a cc para hallar la respuesta.

Implementación

Complejidad temporal: O(1)\mathcal{O}(1)

#include <iostream> using namespace std; int solve(long long a, long long b, long long c) { long long numGroup = abs(a - b) * 2; if (a > numGroup || b > numGroup || c > numGroup) { return -1; } else { long long ans = c + abs(a - b); /* * Si la respuesta es mayor que el número * de personas en el grupo, entonces debemos * restar el número de personas entre a y b * para hallar la respuesta (ya que esto forma un círculo). */ if (ans > numGroup) ans -= (abs(a - b) * 2); return ans; } } int main() { int n; cin >> n; for (int i = 0; i < n; i++) { long long a, b, c; cin >> a >> b >> c; cout << solve(a, b, c) << endl; } }
import java.io.*; import java.util.*; public class WhosOpposite { static long solve(long a, long b, long c) { long numGroup = Math.abs(a - b) * 2; if (a > numGroup || b > numGroup || c > numGroup) { return -1; } else { long ans = c + Math.abs(a - b); /* * Si la respuesta es mayor que el número * de personas en el grupo, entonces debemos * restar el número de personas entre a y b * para hallar la respuesta (ya que esto forma un círculo). */ if (ans > numGroup) ans -= (Math.abs(a - b) * 2); return ans; } } public static void main(String[] args) { Kattio io = new Kattio(); int n = io.nextInt(); for (int i = 0; i < n; i++) { long a = io.nextInt(); long b = io.nextInt(); long c = io.nextInt(); io.println(solve(a, b, c)); } io.close(); } // CodeSnip{Kattio} }
def solve(a, b, c): num_group = abs(a - b) * 2 if a > num_group or b > num_group or c > num_group: return -1 else: ans = c + abs(a - b) """ Si la respuesta es mayor que el número de personas en el grupo, entonces debemos restar el número de personas entre a y b para hallar la respuesta (ya que esto forma un círculo). """ if ans > num_group: ans -= abs(a - b) * 2 return ans n = int(input()) for _ in range(n): a, b, c = map(int, input().split()) print(solve(a, b, c))