C++で競技プログラミングのコードを短縮する方法|typedefとマクロ活用術
競技プログラミングでは、限られた時間の中でいかに素早くコードを記述できるかが重要です。そのため、長い型名や頻繁に使う処理を短く書く「コード短縮テクニック」が重宝されます。この記事では、typedef やマクロ(#define)を活用した代表的な短縮方法を、サンプルコード付きで解説します。
typedef で型名を短縮する
競技プログラミングでは、オーバーフロー対策として 64 ビット整数型の long long を使う場面が非常に多くあります。しかし、その都度「long long」と入力するのは手間です。そこで typedef を使って短い別名を定義しましょう。
通常のコード
#include <iostream>
using namespace std;
int main() {
long long x = 10;
long long y = 50;
cout << x << ", " << y;
}
出力
10, 50
typedef で短縮したコード
#include <iostream>
using namespace std;
typedef long long ll;
int main() {
ll x = 10;
ll y = 50;
cout << x << ", " << y;
}
出力
10, 50
このように typedef long long ll; と一度宣言しておけば、以降は「ll」と書くだけで済み、入力の手間を大幅に減らせます。
マクロで STL の記述を短縮する
vector や pair といった STL コンテナを頻繁に使う場合も、マクロと typedef を組み合わせるとさらにコードを短くできます。
サンプルコード
#include <iostream>
#include <vector>
#define F first
#define S second
#define PB push_back
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;
int main() {
vi v;
pii p(50, 60);
v.PB(10);
v.PB(20);
v.PB(30);
for (int i = 0; i < v.size(); i++)
cout << v[i] << " ";
cout << endl;
cout << "First : " << p.F;
cout << "\nSecond: " << p.S;
}
出力
10 20 30 First : 50 Second: 60
この例では、以下のような短縮が実現されています。
v.push_back(10)→v.PB(10)p.first→p.Fp.second→p.Svector<int>→vipair<int, int>→pii
短縮テクニックを使う際の注意点
マクロや typedef を乱用するとコードの可読性が下がり、デバッグが難しくなる場合があります。業務開発では避けるべき書き方ですが、競技プログラミングでは「いかに速く正確なコードを書くか」が最優先されるため、実践的なテクニックとして広く使われています。自分が覚えやすい範囲で短縮を取り入れ、あらかじめテンプレートとして準備しておけば、コンテスト本番でも素早く実装に取り掛かれるでしょう。
-
C++プログラミング言語とは?特徴と基本をわかりやすく解説
C++は、1979年にベル研究所のビャーネ・ストロヴストルップ(Bjarne Stroustrup)によって開発されたプログラミング言語です。高水準言語と低水準言語の両方の特徴を兼ね備えていることから、「中級言語(ミドルレベル言語)」と位置づけられています。C++はC言語のスーパーセットであり、事実上すべての有効なCプログラムは、そのまま有効なC++プログラムとして扱えます。さらに、WindowsやmacOS、各種UNIXなど、幅広いプラットフォームで動作する点も大きな魅力です。システム開発からゲーム、組み込みソフトウェアまで、多岐にわたる分野で長年活用され続けています。C++の主な言語特性C
-
競技プログラミングに役立つPythonの高速入出力(I/O)方法まとめ
競技プログラミングでは、入力をいかに速く読み込めるかが勝敗を左右する重要なポイントになります。本記事では、Pythonにおけるさまざまな入出力(I/O)方法を、具体例とともにわかりやすく解説していきます。例として、CodeforcesやSPOJなどのオンラインジャッジで「4つの整数 a, b, c, d を読み込み、その積を出力する」というシンプルな問題を考えてみましょう。実装方法は複数あるため、順番に見ていきます。基本の入力方法方法1:リスト内包表記を使うa, b, c, d = [int(x) for x in input().split()]print(a*b*c*d)方法2:map関数