[Codeforces] Educational Codeforces Round 42

11일 전 라운드인데 시험기간에 숙제도 여럿 겹쳐서 정신이 없었어서 후기를 이제야 남기네요. E까지는 풀만한 것 같았는데 D까지밖에 못풀었고 B, D 둘 다 2번씩 틀렸어서 기대에 못 미치는 성적을 받았습니다.

 

A - Equator

 

전체의 합을 일단 구해놓은 뒤, 다시 앞에서부터 합을 더해나가면서 그것에 2를 곱한 값이 전체를 넘는 순간을 확인합니다. 전체에서 2를 나누는 것 보다 합에서 2를 곱하는 것이 더 안전합니다. int 범위 안에 해결되지만 풀 때는 그냥 고민하지 않고 long long을 사용했습니다.

 

https://github.com/blisstoner/Codeforces/blob/master/Educational%20Round%2042/A.cpp

 

B - Students in Railway Carriage

 

매 순간 student 혹은 programmer중 더 많은 종류를 자리에 앉게 하면 됩니다. 학생이 2명, 프로그래머가 0명일 때 *...*에서 답이 0인데 프로그래머를 앉게 할 수 없을 때 바로 while문을 탈출하도록 해서 2번 틀렸습니다.

 

https://github.com/blisstoner/Codeforces/blob/master/Educational%20Round%2042/B.cpp

 

C - Make a Square

 

특정 수가 제곱수인지 판단하는 함수를 만들어 둔 이후, 그냥 모든 경우에 대해 전수조사를 하기만 하면 됩니다.

 

https://github.com/blisstoner/Codeforces/blob/master/Educational%20Round%2042/C.cpp

 

D - Merge Equals

 

일단 제 코드는 많이 더럽습니다. 그런데 사실 핵심 아이디어는 각 value의 처음 등장위치를 가지는 map을 하나 만들어두고, 앞에서부터 값을 확인하면서 a[i]를 입력받았을 때 map[a[i]]가 존재할 경우 a[map[a[i]]는 0으로 만들고 a[i]는 2배를 한 뒤, 마찬가지로 2배한 a[i]에 대해서 map[a[i]]를 확인하고.. 이를 반복하면 됩니다. 저는 priority_queue를 마구 만들어냈는데 그럴 필요가 없었네요.

 

value가 int를 매우 쉽게 넘어가는데 그 부분을 제대로 고려하지 않아서 2번 틀렸습니다.

 

https://github.com/blisstoner/Codeforces/blob/master/Educational%20Round%2042/D.cpp

 

E까지 풀었으면 좋을 뻔 했지만 E를 못풀었다고 해도 나머지를 빨리 풀어냈으면 좋았을텐데 그러지 못했습니다 ㅠ_ㅠ

 

  Comments