fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 21760 (C++) 야구 시즌
최초 업로드: 2025-09-03 15:28:47
최근 수정 시간: 2025-09-03 15:29:06
게시자: rlatjwls3333
카테고리: 백준
조회수: 6
# [Silver V] 야구 시즌 [문제 링크](https://www.acmicpc.net/problem/21760) ## 문제 설명 <p>KOI 야구 리그에는 $N$개의 지역리그가 존재하고 각 지역리그에는 $M$개의 팀이 존재해서, 리그 전체로는 $N \times M$개의 팀으로 운영되고 있다.</p> <p>한 시즌에 각 팀은 같은 지역리그 팀뿐만 아니라 다른 지역리그 팀과도 경기를 해야 한다. 같은 지역리그 팀과의 팀당 경기 수는 $A$로 같은 지역리그 팀들에 대해서 모두 동일하다. 즉, 한 팀 $X$는 같은 지역리그에 있는 모든 팀 $Y$ ($\ne X$)와 각각 $A$번의 경기를 한다. 또한 다른 지역리그 팀과의 팀당 경기 수는 $B$로 다른 지역리그 팀들에 대해서 모두 동일하다. 즉, 한 팀 $X$는 다른 지역리그에 있는 모든 팀 $Z$($\ne X$)와 각각 $B$번의 경기를 한다. 단, $A$와 $B$는 $A = k \times B$ ($k$는 $1$ 이상의 정수)를 만족해야 한다.</p> <p>세계적 판데믹의 영향으로 올해 KOI 야구 리그는 시즌을 단축하여, 리그의 전체 경기 수가 $D$개 이하 이면서 $D$에 가장 가깝게 되도록 정하기로 했다. 따라서 같은 지역리그 팀과의 팀당 경기 수 $A$와 다른 지역리그 팀과의 팀당 경기 수 $B$를 새롭게 결정해야 한다. 물론, $A = k \times B$를 만족해야 하고, $k$는 변함없이 유지되어야 한다. 또한 각 팀은 다른 팀과 적어도 한 번이상은 경기를 해야 한다. 다시 말해서, $A \ge 1$, $B \ge 1$을 만족해야 한다.</p> <p>예를 들어, $N = 2$, $M = 3$, $k = 3$일 때, 경기 수 제한 $D = 60$이면, $A = 6$, $B = 2$일 때, 다른 지역리그 팀들과의 총 경기 수는 $18$이고, 같은 지역리그 팀들과의 총 경기 수는 $36$이다. 따라서 리그 전체 경기 수는 $54$로 $D$에 가장 가까운 새로운 경기 수이다.</p> <p>지역리그의 개수 $N$, 각 지역리그에 속하는 팀 수 $M$, 그리고 위에서 $A = k \times B$를 만족하는 정수 $k$, 새로운 경기 수 제한 $D$가 주어질 때, $D$ <strong>이하</strong>이면서 $D$에 <strong>가장 가까운</strong> 리그 전체 경기 수를 계산해서 출력하는 프로그램을 작성하시오.</p> ## 입력 <p>첫 번째 줄에 테스트 케이스의 개수 $T$가 주어진다.</p> <p>다음 $T$개의 줄에 각 테스트 케이스의 정보가 한 줄에 하나씩 주어진다.</p> <p>각 테스트 케이스는 하나의 줄에 네 개의 정수 $N$, $M$, $k$, $D$가 공백 하나를 사이로 두고 주어진다.</p> ## 출력 <p>$T$개의 각 줄에 각 테스트 케이스에 대해 리그 <strong>전체 경기 수</strong>를 출력한다.</p> <p>만약 조건을 만족하는 경기 수가 존재하지 않으면 $-1$을 출력한다.</p> ## 풀이 같은 지역리그 팀과의 경기 수 + 다른 지역리그 팀과의 경기 수를 구하는 문제이다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--) { int n, m, k, d; cin >> n >> m >> k >> d; int cur = k*n*(m*(m-1)/2) + m*m*(n*(n-1)/2); if(cur>d) cout << "-1\n"; else cout << d/cur*cur << '\n'; } } ```