CPP

Cプリプロセッサで加算までやった

数値は2進リスト。 #define par_open ( #define par_close ) #define comma , #define cat_(a,b) a##b #define cat(a,b) cat_(a,b) #define defif_val_0(t, f) f #define defif_val_1(t, f) t #define defif_(b) defif_val_##b #define defif(b) defif_(b) #…

CPPで真偽値とリスト

CPPはC PlusPlusじゃなくてC PreProcessorだよ! gcc -E nanntoka.cで実行。 #define par_open ( #define par_close ) #define cat_(a,b) a##b #define cat(a,b) cat_(a,b) #define defif_0(t, f) f #define defif_1(t, f) t #define defif_(b, t, f) defif_…

ProjectEuler 3 C++TMP

#include <iostream> template<long long int p,long long int i=2> struct p3 { //static const bool per = p%i==0; static const long long int value = p3<p%i==0?p/i:p,p%i==0?i:i+1>::value; }; template<long long int p> struct p3<p,p> { static const long long int value = p; }; int main() { std::cout << p3<6…</p,p></long></p%i==0?p/i:p,p%i==0?i:i+1></long></iostream>

ProjectEuler 2 C++TMP

#include <iostream> template<int a,int b> struct intlt { static const bool value = a < b; }; template<bool inrange=true,int a=1,int b=1> struct fibsum { static const int value = fibsum<intlt<a+b,4000000>::value,b,a+b>::value + (b%2==0?b:0); }; template<int a,int b> struct fibsum<false,a,b> { static …</false,a,b></int></intlt<a+b,4000000></bool></int></iostream>

ProjectEuler 1 C++TMP

#include <iostream> template<int i=0> struct sum35 { static const int value = sum35<i+1>::value + ((i%3==0 || i%5==0)?i:0); }; template<> struct sum35<1000> { static const int value = 0; }; int main() { std::cout << sum35<0>::value << std::endl; return 0; }</i+1></int></iostream>

C++TMPを使ってコンパイル時に多倍長フィボナッチ計算。

C++テンプレートメタプログラミング、つまりC++のテンプレート機能を使うと、静的に決定できる計算をコンパイル時にやってのけることができる。あまりにすごすぎたのでフィボナッチ計算のプログラムを作ったのだが、unsigned long long intではすぐ桁あふれ…

JOI2006本選 一括@C++

JOI2009本選にそなえて、JOI2006本選を3時間かけて実践演習。JOI2007ではじめて本選にいったときにちょっと見たときは全然解ける気がしなかった。 1 pairは適切にfirst優先でsecondを次に比較する機能があるので、pairにいれてsortすればおわり。 #include <cstdio> </cstdio>…

麻雀で天和に遭遇する確率をシミュレート@C++

ランダムに牌を選択し、和了の形ができているかどうかチェックするプログラム。10億回まわしてみた。 ソース #include <cstdio> #include <iostream> #include <vector> #include <algorithm> using namespace std; const char* tile_names[] = { "m1","m2","m3","m4","m5","m6","m7","m8","m9", "</algorithm></vector></iostream></cstdio>…