強欲で謙虚なツボツボ

趣味の読書の書の方

【C++】AtCoderコンテスト #2

概要

先週に引き続き、AtCoder Beginners Contestに参加した。

前回は遅刻したが、今回はちゃんと21時から22時40分まで参加できた。

next_permutationを新たに覚えた。

 

参加結果

A, Bは楽に解くことができた。

Cがどうしたらよいかまるで分らなかったのがショックだった。

少しわかったつもりでいたけど、まだ全然であることがよくわかった。

今後もできるだけ参加して1コンテスト1個でも新しいことを覚えていけたらと思う。記録をつけた方がモチベーションが保てそう。

ちゃんと21時から参加したからか、前回と同じくBまでしか解けてないのにレートが前回より上がり幅が大きかった。(前回6上昇、今回23上昇)

 

f:id:taopo:20201115230515j:plain

 

next_permutation(順列生成)

これ便利ですね。

今回のC問題で知らずに自力で順列を作ろうとして全くできなかった。(Cでこんなに難しいのかって驚いてしまった。)
これを知ってれば簡単そうだったし、next_permissionはかなり基本的なものなんだろうなという感じ。

順列はしょっちゅう出てくるだろうし今回でちゃんと覚えて帰ろう。

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<int> v = {1, 2, 3};
    do {
        cout << v[0] << " " << v[1] << " " << v[2] << endl;
    } while (next_permutation(v.begin(), v.end());
    return 0;
}

# 出力
1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 1 2 
3 2 1

計算量: (last - first) / 2

順列なので、(last - first)! 個ある

あと、setprecisionも調べなくても思い出せるようにしておく。

 

まとめ

順列はnext_permutation。

しばらくはC問題までを時間内に解き切ることが目標。