Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

競技プログラミング メモ

スポンサードリンク

f:id:fa11enprince:20200628232802j:plain
まだまだ競技プログラミングは初心者です(´・ω・`)。
とりあえずテンプレがあったほうがいいのでテンプレをメモります。
すごいのになるとマクロの嵐ですよね…あれはすごい。

とりあえずテンプレ

using namespace std;
namespace patch
{
    const int Failed = -1;

    template <typename T>
    string to_string(const T &n)
    {
        ostringstream stm;
        stm << n;
        return stm.str();
    }

    int stoi(const string &str)
    {
        int ret;
        istringstream iss(str);
        iss >> ret;
        if (iss.fail())
        {
            throw Failed;
        }
        return ret;
    }
    vector<string> split(const string &str)
    {
        istringstream iss(str);
        vector<string> ret;
        copy(
            istream_iterator<string>(iss),
            istream_iterator<string>(),
            back_inserter(ret));
        return ret;
    }
    vector<string> split(const string &str, char delim)
    {
        istringstream iss(str);
        string tmp;
        vector<string> res;
        while (getline(iss, tmp, delim))
        {
            res.push_back(tmp);
        }
        return res; 
    }
}

int main()
{
    ios::sync_with_stdio(false);

    return 0;
}

あとは今日覚えたやつで便利なやつ。
ちょっと速度稼ぎたいためにvectorの2次元の場合で
最初から必要な分を確保する書き方…これは便利(*´Д`)
もちろん中身が構造体とかでも問題ない。

vectorで多次元の初期化方法

#include <iostream>
#include <vector>

using namespace std;

enum MKind
{
    Road = 0,
    Wall = 1
};

struct Maze
{
    MKind kind;
    int state;
};

int main()
{
    const int X = 5;
    const int Y = 10;
    // 10 x 5の二次元のvectorを作成
    vector<vector<Maze>> m(X, vector<Maze>(Y, {MKind::Road, 0}));
    
    for (int y = 0; y < Y; y++)
    {
        for (int x = 0; x < X; x++)
        {
            if (y == 0 || y == Y - 1) m[x][y].kind = MKind::Wall;
            if (x == 0 || x == X - 1) m[x][y].kind = MKind::Wall;
            cout << m[x][y].kind << " ";
        }
        cout << '\n';
    }
    return 0;    
}

はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
に書いてありました。