【ABC163에 참가해 보았다】재택 근무가 되었기 때문에 매니지먼트계 SE가 경기 프로그래밍 시작해 보았다. #1 -해설-

마지막 기사



지난번에는 AtCoder에 참여한 내 결과와 반성을 보고했습니다.
【ABC163에 참가해 보았다】재택 근무가 되었기 때문에 매니지먼트계 SE가 경기 프로그래밍 시작해 보았다. #1

(수요가 있는지는 전혀 모릅니다만)
이번 기사에서는 제가 해답할 수 있던 ABC 문제에 대해 해설합니다.

A 문제: <A - Circle Pond>



문제문 발췌


해설



원주를 요구하는 문제입니다.
원주는 직경 × 원주율로 구할 수 있네요.
직경에 대해서는 입력값으로 반경을 얻을 수 있으므로 OK! !
그리고 필요한 원주율입니다만 다음과 같이 cmath를 받아들여 M_PI를 사용할 수 있습니다.

problemA.cpp
#include <iostream>
#include <cmath>

using namespace std;

int main(int argc, const char * argv[]) {

    int r;
    cin >> r;

    cout << 2*r*M_PI << endl; //M_PIは円周率

    return 0;    
}

문제분을 잘 읽으면 다음의 기재가 있습니다.


그 때문에 M_PI를 사용하지 않아도 학생 시대가 된 분도 많은 원주율=3.14를 이용할 수도 있습니다.

B문제: <B - Homework>



문제문 발췌


해설



그림에 쓰면 이미지가 붙기 쉽다고 생각합니다.


라는 것은 모든 숙제를 끝내기 위해서는 이런 이미지가 되는 것을 알 수 있다고 생각합니다.


그리고 필요한 것은 「다카하시군이 여름방학(N일)의 사이에 숙제를 끝낼 수 있을까」를 판정하는 것입니다.

problemB.cpp
#include <iostream>

using namespace std;

int main(int argc, const char * argv[]) {

    int n,m;
    cin >> n >> m;

    int a[m];
    for(int i=0; i<m; i++) cin >> a[i];

    int total = 0;

    for(int i=0; i<m; i++){
        total += a[i]; //宿題日数を足し合わせ
    }

    int judge = n-total; //夏休みの日数から宿題のトータル日数をマイナス

    if(judge<0) //はたして高橋君は宿題を終えることができるのか。。
        cout << "-1" << endl;
    else
        cout << judge << endl;

    return 0;

}

C문제: <C - management>



문제문 발췌


해설



이쪽도 B문제와 같이 그림에 쓰면 알 수 있다고 생각합니다.


실제 입력 예를 바탕으로 좀 더 이미지를 부풀립니다.

이 입력 예에서는 다음과 같은 관계가 있습니다.


이것뿐이라고 나도 당일 그다지 이미지를 몰랐기 때문에,
또 한 단계로서 실제로 상사와 부하의 관계를 피라미드적으로 써 봅니다.

이것으로 이미지가 붙었습니까? ?
중요한 점은 직원 번호 #1의 사람은 반드시 부하가 있다(상사이다)라는 것입니다.

이것들을 근거로 코드를 기재합니다.

problemC.cpp
#include <iostream>

using namespace std;

int main(int argc, const char * argv[]) {

    int n;
    cin >> n;

    int a[n];
    a[1] = 0; //社員番号#1(a[1])は一番偉いから上司はいない

    for(int i=2; i<=n; i++) cin >> a[i]; //社員番号#2〜#Nの上司の人数を入力

    int ans[n];
    for(int i=1; i<=n; i++) ans[i] = 0; //配列の初期化

    int tmp;

    for(int i=1; i<=n; i++){
        tmp = a[i];
        ans[tmp]++; //社員番号#iの上司である人の社員番号a[i]をカウント
    }

    for(int i=1; i<=n; i++) cout << ans[i] << endl; //カウントした結果を出力

    return 0;

}

마지막으로



어땠습니까?
해설을 기재하는 것도 처음이므로, 봐도 모르겠다고 좀 더 이렇게 하면 좋은 것이 아닌가? 같은 따뜻한 말 두시도시 기다리고 있습니다.

좋은 웹페이지 즐겨찾기