【競プロ】AtCoderを解くときのTips【C++】

book-and-pc-on-desk プログラミング

AtCoderのコンテストを解く中で調べた内容を随時まとめていきます。

C++の文法については、以下の記事にまとめています。

標準入力を配列で受け取る

/*
標準入力
4
1 2 3 4 
*/

int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
  cin >> a[i];
}
// a = {1, 2, 3, 4}

文字列⇔数値の変換

//文字列⇒数値
string s = "123";
int i = stoi(s);


//数値⇒文字列
int i = 123;
string s = to_string(i);

文字列の文字を数値に変換する

string s = "123";
//文字列から一文字数値として取り出す
int i = s.at(0) - '0';  // i = 1


//使用例
//文字列sを一文字ずつ見て、その数値に対する配列vの要素を出力する。
vector<string> v = {"one", "two", "three"};
string s = "213";
for (int i = 0; i < 3; i++) {
  //配列の添字は0から始まるため -'1'
  cout << v[s[i] - '1'] << " ";  // two one three
  //または 
  //cout << v[(s[i] - '0') -1] << " ";
}

ある文字列を含むか

ある文字列Tが文字列Sを含むか?

string t = "競技プログラミング";
string s = "プロ";

if(t.find(s) != string::npos) {
    cout << "含まれています";
} else {
    cout << "含まれていません";
}

文字列が一致した場合は、その位置を返す。見つからない場合は、「string::npos」を返す。

配列を初期化

配列

vector<string> v(3, "#");

for (int i = 0; i < 3; i++)
{
    cout << v[i];
}

/* 出力
###
*/

二次元配列

「vector<vector<T>> 変数名(要素数1, vector<T>(要素数2, 初期値))」の初期値で宣言した値で、配列が埋められる。

vector<vector<string>> v(3, vector<string>(3, "#"));

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        cout << v[i][j];
    }
    cout << endl;
}

/* 出力
###
###
###
*/
タイトルとURLをコピーしました