
AtCoder Beginner Contest 205 - A부터 D까지 업솔빙
falconlee236
·2021. 12. 16. 23:50
AtCoder Beginner Contest 205 A부터 D까지 업솔빙
이번 대회 문제 set은 전체적으로 평이하다. 마지막 문제에 조금 헤맸는데, 분명 대회때는 TLE가 나와서 이 문제를 못풀었다고 생각했는데 대회 결과를 보니까 4솔로 되어있어서 이상했다. 결과를 보니 대회에서 제공하는 testcase는 모두 통과했는데, virtual에서 제공하는 test case는 통과못해서 그런 결과가 나온것 같다. 하지만 TLE가 나온것은 TLE이기 때문에 틀렸다고 생각하고 업솔빙을 했다.
이번 대회를 참여하면서 배운 것은
- std::lower_bound()의 활용
문제 옆에 붙어있는 난이도는 Atcoder Problems 에서 추정한 것으로 작성했다는 것을 미리 알린다.
A - kcal (*6)
접기/펼치기
문제 설명
우리는 100ml 당
제약
- 모든 입력은 정수이다.
문제 해설
단순 수학, 비례식을 써도 풀 수 있고 곱셈과 나눗셈을 쓰면 풀 수 있다. 100ml당 칼로리 값이
정답 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
double a, b; cin >> a >> b;
cout << a * b / 100;
return 0;
}
B - Permutation Check (*16)
접기/펼치기
문제 설명
제약
- 모든 입력은 정수로 이루어져 있다.
문제 해설
순열은
정답 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n; cin >> n;
int arr[n + 1] = {0};
for(int i = 0; i < n; i++){
int num; cin >> num;
arr[num]++;
}
bool flag = true;
for(int i = 1; i <= n; i++){
if(arr[i] != 1) flag = false;
}
cout << (flag ? "Yes" : "No");
return 0;
}
C - POW (*63)
접기/펼치기
문제 설명
밑수
세 정수
제약
- 모든 값은 정수로 주어진다.
문제 해설
문제 조건을 보면
조금만 테스트케이스를 생각해보면 밑수가 크면 제곱한 값도 크고, 밑수가 작으면 제곱한 값도 작다는 것을 알 수 있다. 여기서 제곱의 횟수인
정답 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int a, b, c; cin >> a >> b >> c;
if(c % 2 == 0){
a = abs(a);
b = abs(b);
}
cout << (a > b ? ">" : (a < b ? "<" : "="));
return 0;
}
D - Kth Excluded (*713)
접기/펼치기
문제 설명
제약
문제 해설
일단 이 문제의 제목인
우리는 cnt라는 배열의 값을 구할 것이고 정의는 다음과 같다.
번째 배열의 원소보다 작은 양수의 개수
그렇다면 이 값은 어떻게 구할까? 첫번째 배열에 원래 있어야 하는 수는 뭘까?
우리가 구할 질의의 수는
그렇다면
정답 코드
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n, q; cin >> n >> q;
ll arr[n + 1] = {0, }, cnt[n + 1] = {0, };
for(int i = 1; i <= n; i++){
cin >> arr[i];
cnt[i] = arr[i] - i;
}
while(q--){
ll k; cin >> k;
int idx = lower_bound(cnt + 1, cnt + n + 1, k) - cnt;
cout << arr[idx - 1] + k - cnt[idx - 1] << "\n";
}
return 0;
}
'알고리즘 > atcoder' 카테고리의 다른 글
AtCoder Beginner Contest 208 A부터 D까지 업솔빙 (0) | 2021.12.24 |
---|---|
AtCoder Beginner Contest 206 - A부터 D까지 업솔빙 (0) | 2021.12.19 |
AtCoder Beginner Contest 204 - A부터 D까지 업솔빙 (0) | 2021.11.27 |
AtCoder Beginner Contest 202 - A부터 D까지 업솔빙 (0) | 2021.11.22 |
AtCoder Beginner Contest 201 - A부터 C까지 업솔빙 (0) | 2021.11.20 |