😊

競技プログラミングでよく使うコード

2023/01/03に公開

概要

よく使うコードを備忘録としてまとめておきます。
随時更新していきます。

出力

Main.cpp
#include <iostream>
using namespace std;

int main()
{
  cout << "Hello World!" << endl; // Hello World!

  return 0;
}

入力

標準入力を受け取る

入力例
3
Main.cpp
#include <iostream>
using namespace std;

int main()
{
  int n;
  cin >> n;

  return 0;
}

標準入力をN個受け取る

入力例
3
1 10 100
Main.cpp
#include <iostream>
using namespace std;

int main()
{
  int n;
  cin >> n;
  int a[n];
  for (int i = 0; i < n; i++)
    cin >> a[i];
  
  return 0;
}

処理

配列

ソート

Main.cpp
#include <iostream>
using namespace std;

int main()
{
  int n = 5;
  int array[] = {1, 3, 5, 2, 4};

  sort(array, array + n); // 1,2,3,4,5
  sort(array, array + 5, greater<int>()); // 5,4,3,2,1
}

最大値・最小値

Main.cpp
#include <iostream>
using namespace std;

int main()
{
  int array[] = {1,2,3,4,5};

  cout << min_element(array, array + 5) << endl; // 最小の要素のポインタ
  cout << *min_element(array, array + 5) << endl; // 1
  cout << max_element(array, array + 5) << endl; //  最大の要素のポインタ
  cout << *max_element(array, array + 5) << endl; // 5

  return 0;
}

ベクトル

長さNのベクトルを作る

Main.cpp
#include <iostream>
#include <vector>
using namespace std;

int main()
{
  int n = 5;
  cin >> n;
  vector<int> v(n);
  for (int i = 0; i < n; i++)
    cin >> v[i];
  return 0;
}

ソート

   sort(v.begin(),v.end());

重複要素を削除する

   v.erase(unique(v.begin(), v.end()),v.end());

参考:https://qiita.com/ysk24ok/items/30ae72f4f1060b088588

リサイズ

領域を確保する時に用いる。

   v.resize(n)

整数

二進数

Main.cpp
#include <iostream>
#include <bitset>
using namespace std;

int main()
{
  int number = 65535;
  bitset<32> bs(number);
  cout << bs << endl; // 00000000000000001111111111111111

  return 0;
}

文字・文字列

Main.cpp
#include <iostream>
using namespace std;

int main()
{
  string s = "Some String";
  return 0;
}

反転させる

Main.cpp
#include <iostream>
using namespace std;

int main()
{
  string s = "Some String";
  reverse(s.begin(),s.end());
  cout << s << endl; // gnirtS emoS

  return 0;
}

前方一致しているか判別する

Main.cpp
#include <iostream>
using namespace std;

int main()
{
  string s1 = "abcde";
  string s2 = "abc";
  string s3 = "cde";

  cout << equal(s2.begin(),s2.end(),s1.begin()) << endl; // 1
  cout << equal(s3.begin(),s3.end(),s1.begin()) << endl; // 0

  return 0;
}

文字列の一部を削除する

Main.cpp
#include <iostream>
using namespace std;

int main()
{
  string s = "abcde";
  s.erase(0,3);

  cout << s << endl; // de

  return 0;
}

文字コードを取得する

+を前につければ良い

Main.cpp
#include <iostream>
using namespace std;

int main()
{
  string a = "A";
  cout << +a[0] << endl; // 65
  cout << +a[0] - 64 << endl; // 1
  return 0;
}

アルファベットが何番目かをintで取得する

Main.cpp
#include <bits/stdc++.h>
using namespace std;

int uppercase_to_int(char c)
{
  return +c - 64;
}

int downcase_to_int(char c)
{
  return +c - 96;
}

int main()
{
  cout << uppercase_to_int("A"[0])  << endl;
  cout << downcase_to_int("b"[0])  << endl;
  return 0;
}
GitHubで編集を提案

Discussion