活動日誌'19 No.001

投稿者 NOSS | 2019-04-10

こんにちは、NOSSです。 今日は新入生向けに説明会を行いました。

説明会

説明会には8名ほど参加しに来てくれました。

最初の30分ほどスライドを使って競技プログラミングと活動内容について紹介しました。
詳しい内容は紹介記事にも書いてあるので参照してみてください。
4/19(金)にも同様の説明会を行う予定です。

今日いただいた質問をいくつか紹介したいと思います。

Q. 難しい問題でも解けるようになりますか?

A. はい (個人の努力次第ですが…)

普段の活動で問題の解説やアルゴリズムの講習を行うので活動に来ていただければ基本的には大丈夫だと思います。
もちろん難しいところもあるのでそこは頑張らないといけませんが…

AtCoderで言うと300点以下の問題はほぼ確実に解けるようになると思います。

Q. 兼サーはできますか

A. はい

平日は週一の活動なので兼サーも容易だと思います。
ただ、逆にその週一の活動に出られないとほとんど活動出来ないということになります…。
今学期の活動日は毎週金曜になる可能性が高いです。

体験会

説明会後に部員が教えながら実際に競技プログラミングの問題を解いてみるという活動をしました。

問題はAtCoderのものを利用しました。
解答を提出するためにはアカウント登録が必要なのでまずは公式サイトで新規登録してみましょう。

コンテストURLはこちら
https://not-522.appspot.com/contest/5749287812071424

解説

簡単な解説を載せておきます。

ABC039 A - 高橋直体

https://atcoder.jp/contests/abc039/tasks/abc039_a

33 軸方向の辺の長さが A,B,CA,B,C の直方体の表面積を求める問題です。

面の種類は 33 種類ありそれぞれの面積は AB,BC,CAAB, BC, CA です。それぞれ 22 面あるので 22 倍すれば解になります。
掛け算には*を使います。

  • 解法コード例
#include <iostream>

using namespace std;

int main(){
    int a, b, c;
    cin >> a >> b >> c;
    cout << (a*b+b*c+c*a)*2 << endl;
    return 0;
}

ABC034 A - テスト

https://atcoder.jp/contests/abc034/tasks/abc034_a

22 回のテスト点数を比較して 22 回目のテストの点が 11 一回目に比べて良いか悪いか判定する問題です。
比較にはif文が使えます。

  • 解法コード例
#include <iostream>

using namespace std;

int main(){
    int x, y;
    cin >> x >> y;
    if(x < y){
        cout << "Better" << endl;
    }
    else{
        cout << "Worse" << endl;
    }
    return 0;
}

ABC076 A - Rating Goal

https://atcoder.jp/contests/abc076/tasks/abc076_a

R,GR,G が与えられるので (R+X)/2=G(R+X)/2 = G となるような XX を求めよ、という問題です。
X=2GRX = 2*G - R が解です。

  • 解法コード例
#include <iostream>

using namespace std;

int main(){
    int r, g;
    cin >> r >> g;
    cout << 2*g - r << endl;
    return 0;
}

ABC076 B -Addition and Multiplication

https://atcoder.jp/contests/abc076/tasks/abc076_b

はじめ整数 11 があります。この整数に対して次の 22 の操作のいずれかを NN 回行います。

  • 整数を 22 倍にする
  • 整数に KK を足す

NN 回操作した後の整数として考えられるもののうち、最小のものを求めてください。

値をなるべく小さくしたいので 22 つの操作のうち、操作後に値が小さくなるほうを選べばよさそうです。なので、この選択を NN 回繰り返せばいいです。
同様の処理を繰り返すにはfor文が使えます。

  • 解法コード例
#include <iostream>

using namespace std;

int main(){
    int n, k, ans = 1;
    cin >> n >> k;
    for(int i=0;i<n;i++){
        if(ans*2 < ans+k){
            ans = ans*2;
        }
        else{
            ans = ans+k;
        }
    }
    cout << ans << endl;
    return 0;
}

これ以降の問題については省略します。

コメント

たくさんの人に来てもらってうれしかったです。
体験会に移るときにぐだぐだしてしまったのが反省点です。