Tips

ID

線形代数と固有値問題 ひととおり線形代数を学んだ後によむといいかもしれない。できれば、関数解析をちょっとやった後で。スペクトル分解とかの所は結構細かいところまで乗ってるので便利。へぇ、こんな方法でとけるのか、と。でも説明丁寧かといわれるとそ…

ID

単語 rank3::1~~4 --> http://d.hatena.ne.jp/kenta11626918/20111012/1318401749 rank2 --> http://d.hatena.ne.jp/kenta11626918/20111006/1317882668 rank1 -->http://d.hatena.ne.jp/kenta11626918/20111017/1318821771 C34CAFDF85FFCEB9929CD40BD14E730…

木について。

TopCoderではときどき頭混乱させるような木のデータが与えられるので、まとめ。 //consider to be i = 0-based {-1, 0, 0, 2, 2, 4, 4} //i = 3ばんめの2は、2番目に親があるよってことを示してる. int start = 0; for(int i = 0; i < sz; i++) { if(heap[i…

動的計画法(メモ化)の研究

再帰、メモ再帰、動的計画法とは? 有名な??階乗計算を例に取る。 //純粋な再帰。同じ引数を持つ関数を何度も何度も呼び出している。→むだやん。 #include <iostream> #include <cstdio> using namespace std; int fib(int n) { if(n<=1) return n; return fib(n-1)+ fib(n-2</cstdio></iostream>…

#include  空間、座標への対処

二次元座標を簡潔に書くのによさそう.コンストラクタ public member function complex (const T& re = T(), const T& im = T()); complex (const complex& cmplx); template complex (const complex& cmplx); // complex first (2.0,2.0); http://na-inet.j…

#define 一覧

#define ALL(x) (x).begin(), (x),end() #define SZ(x) *1 cout #include #include #include #include #include #include #include #include #include #include #include #define INF (1 pii; typedef pair dot; typedef long long LL; class DonutsOnTheGri…

問題セット

nPr, nCrをもとめる 483, 分母がNまでの分数を昇順にして、k番目の値を求める。 フィボナッチ数列1~nの平均を求める(平均、桁落ち) ファレイ数列を使えば楽. 出力系 "5878!!!"みたいな文字をParseする やや難(SRM304改題) 多角形が長さ1膨張したときの増…

ループ特集

//[x,y] = [0,0]~[9,9]までの間で更新していく. for(int i = 0; i ans[k] = min(ans[k], sum); } } } //全探索 for(int i = 0; i int cnt = 0; while(cnt cnt++; } という風に、最後にcntをインクリメントさせるようにする。 例外は、 while(++cnt

IO関連

sscanfでは[;]とかが無視されてしまう. sscanf(str.c_str(), "var see_ok_%s = %s;", word, flag); flag = ~~~;ってついちゃう. getline string型の欄にgetlineがある。http://www.cppreference.com/wiki/jp/io/getline #include istream& std::getline( i…

深さ優先検索、再帰の実装の仕方まとめ。

//基本はこういう感じ。実際にはこれだと無限ループしてしまうので、条件分岐させる。 int solve(int i, int n) { solve(i+1, n+1); solve(i+1, n); return 0; } //何かの法則を見つけて再帰 そのまえに、再帰のおさらい。 int func(int n) { int ans = 1; i…

ios manipulator

printfと比べて憶えることが多すぎるので、printfとか、scanfのありがたみを改めて実感. フラグ意味 boolalpha"true", "false"という文字を使用してブール型のデータの入出力をできるようにする dec数値型のデータが10進数で表示されるようになる fixed浮動…

ビット演算、2進法での取り扱い, bool

C++では、2進法を取り扱うのに文法は特にない。1000100なら、2みたいに個数をカウントする。 while(n) { n = n & n-1; //n = 10010 &10001 //0になるときは、たとえば、n=10000のとき。 n = 10000 & 01111; } 結構定番みたい。 n = n >> 1; //10010->01001…

オペレータ

class LessInt { public: bool operator()(const int& riLeft, const int& riRight) const { return riLeft ()); //と、あたかも、コンストラクタを呼び出しているがごとく見える. sort(a.begin(), a.end(), cmp) // このとき、クラスは入れ子にできるよ. …

発想の転換

計算機は小数点とか扱うの苦手なので、あまり÷(/)を使わない. できるだけ×をつかうと、int型のみで済む.doubleに変換しなくても良くなる. とくに、座標計算とか、角度もとめるとかはもろにそうで、 int x, y; ならば、 arg = atan2(y, x) とかとやるより…

幅検索の注意.

SRM453.5 div2 medium int longestPath(vector maze, int startRow, int startCol, vector moveRow, vector moveCol) { int row = maze.size(); int col = maze[0].length(); int step[row][col]; //初期化 for(int i = 0; i > que; step[startRow][startCol…

二分法

SRM462 div2 medium 二分検索でもよく使う方法. seek //入力 low = 0; high = 100 while(1) { int mid; mid = (low+high)/2; int calc = ...; //何らかの処理(midを仮引数に関数の戻り値を使用) if(calc > seek) { ///中間の値が大きい->high(最大値)を下げ…

配列を交互に足す 番兵の有効活用

降順に並んだ配列が二つあるとする.サイズは同じとは限らない. 配列を作るときに0を仕込んでおく。(番兵) //0入れる前にa.size(), b.size()を確定させる. a: 7 5 4 2 0 b: 8 3 1 0 //交互に足していって、stop以上になるときの最小の要素数を返す. //…

STL #define vector のまとめ。

元々の定義はこんな感じ. vector(); vector( const vector& c ); explicit vector( size_type num, const T& val = T() ); vector( input_iterator start, input_iterator end ); vector test(sz); //sz:要素数 vector test(sz, 0) //五個の要素を0で初期化…

scanf, printf

書式付出力(printf 系)変換文字列の書式は以下の形式である.printf % [フラグ][フィールド幅].[精度][h/l/L修飾][変換文字]scanfではこうなる。 % [代入抑止][フィールド幅][h/l/L修飾][変換文字] 例 sprintf(fl, %06f, (double)a); //1.2345 12.345 0034…

C言語的文字列操作の復習

#include 大文字,小文字 islower(ch); isupper(ch); 数字 isdigit(ch); int ->string型に. #include #include string IntToString(int number) { string stream ss; //ss(string型)なので、int型であるnumberで初期化できない×ss(number) //[ number; retur…

数系

double res; int t = (int)res; //切り下げ int m = (int)(res+0.5); //四捨五入 int r; if(res-t の ceil関数を使う. double ceil(double x) n-1 テスト用の最大値、最小値の算出 INF = 1 sqrt(A)をint型にしたいときの注意. もしかすると、sqrt(64) = 8.…

参照とアドレスの実験

int main() { int a; a = 1; //なくても、エラーは出ない。 cout int main() { int &a; //参照が初期化されずに宣言されています。 cout int main() { int b = 5; int &a = b; //直接数値を代入するとエラー cout int main() { int b = 5; int &a = b; //箱…

幅優先検索と深さ優先検索の骨格

深さ優先検索:再帰関数で深くまで。 関数1開始→関数1−1開始→関数1−1終了→関数1終了 なので、スタックと同じ. void dfs(int x, int y) { //...の条件のとき再帰せず、終了。 if(...) {...} //..の条件のとき再帰せず、終了。 if(..) {..} //再帰関数で…

文字列リテラルの注意点。

"abc" と'abc'では意味が違うというお話。 C++言語ではどちらもchar型で解釈されてしまうが、 Cでは"abc"はchar型、'abc'はint型に解釈されてしまう。2011.4.4追記 char key = 'a'; char ch = key[0]; int num = key[0]; cout したら、エラー出ずに 97 a と…