https://www.acmicpc.net/problem/27295 실버 5

Baekjoon Online JudgeBaekjoon Online Judgewww.acmicpc.net


죄다 lld로 바꿨는데도 틀리는 걸 보면 논리가 틀린 것 같은데 제 머리로는 안됩니다


#include <iostream>

using namespace std;


long long getGCD(long long a, long long b)

{

if (b == 0) return a;

return getGCD(b, a % b);

}


int main(void)

{

long long n = 0, b = 0, sum_x = 0, sum_y = 0;


cin >> n >> b;

while(n--)

{

long long x = 0, y = 0;


cin >> x >> y;

sum_x += x;

sum_y += b - y;

} // Σ(ax + b - y) = 0 --> a * sum_x + sum_y = 0

sum_y *= -1; // a * sum_x = - sum_y --> a = - sum_y / sum_x


if(sum_x == 0) // a * 0 + sum_y = sum_y 따라서 가능한 a는 어떤 수든 가능

{

cout << "EZPZ";

}

else if(sum_y % sum_x == 0) // 정수로 나오는 출력

{

cout << sum_y / sum_x;

}

else // 분수로 나오는 출력

{

bool minus = (sum_x * sum_y < 0); // 곱해서(나눠서) 음수인 경우 확인

if(sum_x < 0) sum_x *= -1;

if(sum_y < 0) sum_y *= -1;


long long gcd = getGCD(sum_x, sum_y);


if (minus) // sum_y/sum_x 출력할 때 sum_y에 - 붙이기 위해서

{

cout << -sum_y / gcd << '/' << sum_x / gcd;

}

else

{

cout << sum_y / gcd << '/' << sum_x / gcd;

}

}

}