Algorithm/코드포스

CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!) 1648 → 1541

Edyy 2022. 3. 25. 21:59

https://codeforces.com/contest/1656

 

Dashboard - CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!) - Codeforces

 

codeforces.com

 

!!!! 모든 답은 제 풀이일 뿐 정해가 아닐 수 있습니다 !!!!

 

A. Good Pairs

https://codeforces.com/contest/1656/problem/A

 

Problem - A - Codeforces

 

codeforces.com

문제

 

길이가 n인 배열 a가 주어진다. k = 1 ~ n까지에 대해서 abs(a[i]-a[k]) + abs(a[k]-a[j]) = abs(a[i]-a[j])인 쌍을 찾아 출력하는 문제

 

풀이

 

주어진 조건을 만족하는 a[i] , a[j]는  가장 작은 값과 가장 큰 값이다. 이를 찾아 인덱스를 출력해주면 된다.

 

 

코드

 

    #include <bits/stdc++.h>
    using namespace std;
    long long a[100010];
    int main() {
    	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    	int T;
    	cin >> T;
    	while (T--) {
    		int n;
    		cin >> n;
    		int MIN = INT32_MAX, idx1, MAX = INT32_MIN, idx2;
    		for (int i = 1; i <= n; i++) {
    			cin >> a[i];
    			if (MIN > a[i]) {
    				MIN = a[i];
    				idx1 = i;
    			}
    			if (MAX < a[i]) {
    				MAX = a[i];
    				idx2 = i;
    			}
    		}
    		cout << idx1 << ' ' << idx2 << '\n';
    	}
    }

 

B. Subtract Operation

https://codeforces.com/contest/1656/problem/B

 

Problem - B - Codeforces

 

codeforces.com

 

문제

 

n길이의 배열이 있다. 한번의 operation에 원소 1개를 골라 제거한 후 나머지 남은 원소 모두에 제거한 원소의 값만큼 빼주는 연산을 n-1 번 했을때 k값을 만들 수 있으면 YES 아니면 NO를 출력하는 문제

 

풀이

 

여러번 연산을 관찰한 결과 각 원소의 차이들의 원소가 마지막으로 남을 수 있는것을 확인하였고 구현은 각 인덱스마다 k를 더하거나 빼서 원소가 존재하는지 확인했다.

 

코드

 

    #include <bits/stdc++.h>
    using namespace std;
    long long a[200001];
    map<long long, bool> Map;
    int main() {
    	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    	int T;
    	cin >> T;
    	while (T--) {
    		Map.clear();
    		int n;
    		cin >> n;
    		long long k;
    		cin >> k;
     
    		for (int i = 0; i < n; i++) {
    			cin >> a[i];
    			Map[a[i]] = true;
    		}
    		bool flag = false;
    		for (int i = 0; i < n; i++) {
    			if (Map[a[i] + k] || Map[a[i] - k]) {
    				flag = true;
    				break;
    			}
    		}
    		if (flag)cout << "YES\n";
    		else cout << "NO\n";
    	}
    }

 

 

자세한 설명에 중점을 두기보다는 대회 기록에 중점을 둔 글입니다 !

틀린 부분은 감사히 지적받겠습니다.