
Codeforces Round #748 (Div. 3)-D1. All are Same
falconlee236
·2021. 11. 25. 18:58
문제 설명
요한은 정수
이러한 연산을 한번도 수행하지 않거나 한번 이상 수행하고 나서 배열에 있는 모든 원소가 같은 수로 만들고 싶다. 배열에 있는 모든 원소가 같은 수로 만들기 위해서 필요한 최대
Input
첫번째 줄에는 테스트 케이스의 개수를 나타내는 정수
각 테스트케이스의 첫번째 줄에는 숫자
각 테스트케이스의 두번째 줄에는
Output
각 테스트케이스마다 이 배열에 수행할 수 있는 최대 정수
Example
input
3
6
1 5 3 1 1 5
8
-1 0 1 -1 0 1 -1 0
4
100 -1000 -1000 -1000
output
2
1
1100
문제 접근
사용한 알고리즘: 정수론, 수학
걸린 시간 : 00:06
업솔빙의 효과가 톡톡히 드러난 문제이다. 그래서 그런지 이번 문제 셋이 쉽더라도 개인적으로 엄청나게 만족했던 대회였다. 이전 대회 Codeforces Round #751 (Div. 2)에서 C번 문제를 기억하는가? 그 문제가 이번 문제의 약간 어려운 버전인데, 그 문제를 업솔빙 하면서 이 문제를 푸는 방식을 깨달았다. 애초에 저번 대회때 업솔빙을 제대로 했다면 이 문제는 쉽게 풀 수 있다. 단지 나는
이번 문제를 풀고나서 이 문제를 풀면 정수론 실력이 더욱 상승할 것이다.
C. Array Elimination 바로가기
해설
어느 한 수를 정해서 그 수가 되기 위해서 뺄 수 있는 최대
정답 코드
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
int n; cin >> n;
int arr[n];
for(int i = 0; i < n ;i++) cin >> arr[i];
int mn = *min_element(arr, arr + n);
int ans = 0;
for(int i = 0; i < n; i++){
ans = __gcd(ans, arr[i] - mn);
}
cout << (ans == 0 ? -1 : ans) << "\n";
}
}
'알고리즘 > codeforces' 카테고리의 다른 글
Codeforces Round #744 (Div. 3)-A. Casimir's String Solitaire (0) | 2021.11.27 |
---|---|
Codeforces Round #748 (Div. 3)-E. Gardener and Tree (0) | 2021.11.25 |
Codeforces Round #748 (Div. 3)-C. Save More Mice (0) | 2021.11.24 |
Codeforces Round #748 (Div. 3)-A. Elections (0) | 2021.11.24 |
Codeforces Round #751 (Div. 2)-C. Array Elimination (0) | 2021.11.20 |