ABC163に参加してみました

初めに

今回はABC163に参加したので回答出来たものに関して書いて行こうと思います。
因みに今回のコンテストはAtCoderのジャッジシステムの不具合?で画面閲覧が10分以上出来なかった 参加者が居たためUnrated(レーティング更新無し)のコンテストでした。
(私も21:00にサイトにアクセスしたら502が表示されたので、「ん?」となりました。)

https://atcoder.jp/contests/abc163

※ブログ内で問題の制約事項をすべて記載はしないので、制約事項は↑のURLより参照願います。

A - Circle Pond

この問題は円周を計算するだけですね。

#include<bits/stdc++.h>

using namespace std;
using ll = long long;
const long long INF = 1LL<<60;

typedef pair<ll,ll> Pair;

int main(){

double R,PI = 3.14159265358979323846;

PI *= 2.0;

cin >> R;

cout << R*PI << endl;

return 0;

}

こちらは特にゆうことはないですね。ただ、この回答を提出した結果IE(Internal Error)が発生して焦りました。。。 最初は何を意味しているか分からなかったので、なんでACにならないのか少し考えてしまいました。(結果的にはジャッジシステムの問題でした)

解説動画を見たらacosでπの計算をしていたので、ちょっと書き直しました。
たしか大学時代に習った気がするんですけど結構忘れちゃってますね、、、

#include<bits/stdc++.h>

using namespace std;
using ll = long long;
const long long INF = 1LL<<60;

typedef pair<ll,ll> Pair;

int main(){

double R,PI = acos(-1);

cin >> R;

cout << 2.0*R*PI << endl;

return 0;

}

B - Homework

この問題は、N日の夏休みの間にM個の宿題を終わらせて何日遊べるかを出力する問題です。

#include<bits/stdc++.h>

using namespace std;
using ll = long long;
const long long INF = 1LL<<60;

typedef pair<ll,ll> Pair;

int main(){

ll N,M,A;

cin >> N >> M;

for(long long i = 0;i < M;++i){

    cin  >> A;
    N -= A;

}

cout << ( N >= 0 ? N : -1 ) << endl;

return 0;

}

与えられた夏休みの日数Nからそれぞれの宿題を終えるのに掛かる日数を減算していきます。
(わざわざ配列に格納する必要はありません。)
出力は三項演算子を利用して記載しており、Nが0以上かどうかで出力する値を変えています。

C - management

この問題は、N人の社員のそれぞれの社員に直属の部下が何人いるかを求める問題です。
各社員には1~Nの社員番号が与えられ、社員番号1以外のすべての社員には自分より社員番号が小さい直属の上司がいるという前提があります。

#include<bits/stdc++.h>

using namespace std;
using ll = long long;
const long long INF = 1LL<<60;

typedef pair<ll,ll> Pair;

int main(){

long long N,A;

cin >> N;

vector<ll> ans(N+1,0);

for(int i = 1;i < N;++i){

    cin >> A;

    ans[A]++;

}

for(int i = 1;i <= N;++i) cout << ans[i] << endl;

return 0;

}

配列の添え字を社員番号と対応させるため、Nの入力後にN+1個の配列を宣言しています。
(N+1としている理由は、N個の配列を宣言した場合は添え字が0~N-1となりますが、Aの入力は1~Nまでのため、 入力をそのまま配列の添え字として利用するために、N+1個の配列を宣言しています)

入力Aを配列の添え字として設定し、社員番号が入力されるたびインクリメントしていくと、
それぞれの社員に何名の部下がいるのか求まります。

最後に

今回もD問題が解けなくて悔しいですね。数学的な考察が必要な感じの問題だったんですが解説動画見てからコードを書いてみようと思います。 後はD問題だけ集中的に過去問を解いて勉強しようと思います。(ちょうど良さそうなサイトも見つけたので)

AtCoder Scores