プログラミング

離散フーリエ変換を O(n log n) で行うアルゴリズム

離散フーリエ変換とは,長さ の数列 から長さ の数列 への変換で,各 について次のように定義されます. ただし は で定義され, 乗すると 1 になる虚数(の1つ)です.また,逆離散フーリエ変換はその逆変換ですが,式はよく似ています. 逆離散フーリエ変換…

デバッグ出力に役立つ ostream_joiner とは

こんにちは.今日は C++ コンテナの中身を簡単にデバッグ出力できる ostream_joiner を紹介します.ostream_joiner は experimental/iterator をインクルードすることで, std::experimental::ostream_joiner として使えるようになります. #include <experimental/iterator> #inclu</experimental/iterator>…

AtCoder に登録したら解くべき精選過去問 10 問を C 言語(のコード中に埋め込んだ,アセンブラで生成した機械語)で解いてみた ② (第5問から第6問まで)

この記事は前回の続きです.前回は「C 言語で解いてみた」というほぼほぼ詐欺のようなタイトルでしたが,今回はちゃんと書きました. そもそも何をしているの? さて,ここら辺で C 言語の中に機械語を埋め込む方法について説明しておきましょう.提出コード…

MOD 逆数

を整数とすると, と互いに素な任意の整数 に対し, を満たす整数 がただ一つ存在します.この を, を法としたときの逆数といい,競技プログラミングで頻繁に役立ちます.今回はこれを計算するコードを C で書いていきます. 数学的な解き方 ならば,ある整…

AtCoder に登録したら解くべき精選過去問 10 問を C 言語で解いてみた ① (第1問から第4問まで)

「C」という名前の,何でもできてしまうすごいプログラミング言語があるらしいので,この言語を使って drken さんの「AtCoder に登録したら解くべき精選過去問 10 問」を解いてみました.qiita.com↑この方のブログは AtCoder でプログラミングを勉強しよう!…

プログラミングへの想いを語る

僕にはいくつかの趣味があり,その1つがプログラミングです.主に書く言語はC/C++で,ちょっとしたアルゴリズムの知識を利用して小さなツールなどを作っています.この記事では,主にプログラマー以外の人向けに,僕がプログラミングのどういう点に楽しさを…

ncurses への誘い

この記事は C / C++ プログラマーを対象として書かれています.ncurses というライブラリの紹介なのですが,調べてみると python,Ruby でも使えるようです(ここら辺の言語, C 用のライブラリなら何でも持ってますね……). CUI vs GUI C プログラムには, CU…

【闇】【黒魔術】【C++】絶対にやってはいけない inf テク

皆さんこんばんは.今回はちょっと好まれなさそうなC++の使い方を紹介します.たとえばある int 型配列の最小値が知りたいとき,皆さんはどうしていますか. std::vector<int> a = something; int min = 100000000; /* なんか大きな値 */ for(auto i : a){ min = </int>…

jackdaw開発日記(1) C言語でwavファイルを作る

jackdawというプロジェクトを開発しているのですが、後で自分の書いたコードを見返したときに分からなくならないように、いくつか書き残しておこうと思います。今回はまずC言語でwavファイルを作る方法について書きます。 出力先ファイルを作る マップする …

関数を作る

関数を実行時に作る 今回は関数を作ってみましょう。作るといっても、コンパイル時に作るのではありません。実行時に作ります。全体の流れとしては、「①関数を置く領域を作る」→「②そこに処理を書き込む」→「③呼び出す」となります。今回は②のところで「4バ…

C言語で電卓を作ろう

C言語で簡単な数式を読んで計算するプログラムを作ります。 数式内で使える演算子は「+」「-」「*」の3つで、括弧は使えません。 使える数は0以上の整数で、負の数は使えません。 優先順位は「*」が高く、「+」と「-」が低くなるようにします。「2 + 3 * 4」…

みんな大好き,ポインタ/配列/参照 ~多次元配列まとめ~

汎整数型(論理型(bool),文字型(charなど),整数型(intやlongなど))と浮動小数点型を合わせて算術型といい,算術型とvoid型を合わせて基本型といいます。基本型からは「ポインタ型」「配列型」「参照型」の3種類の組込み型が得られますが,この記事ではその…

C++の歴史

注. この記事は学校の課題で書いたレポートの内容を写したものです。 C++の誕生 C++を考案したのは, デンマーク人のビャーネ・ストラウストラップである*1[1]. 彼はケンブリッジ大学計算機研究所で, 博士論文のために複数のコンピュータに仕事を分散させて組…

ペンキ

一次元DPが大好きなので,ペンキ問題について書きます。 ペンキ問題は おいおい,使いかけのペンキの缶を放っておいたら中のペンキが乾いてしまうよ。 | OJ 板がn枚あり,i番目の板の面積はsiです。 ペンキの缶がたくさん(加算無限個)あり,1缶分のペンキで…

スタックとレジスタ

関数呼び出しにおいて,実引数はスタックまたはレジスタで渡されます。 適当なコンパイラでは関数は「まずスタックを読み込み,読み切ったら今度はレジスタから読み込む」という方式を採用しているようです(Borland,EasyIDECなど)。 これを利用して,次のよ…

ポインタとconst

ポインタはアドレスを格納する変数。 constは変数を書き換えないようにする修飾子。 この2つを組み合わせると面倒です。 int main(){ int a, b; const int *p = &a; a = 10; //*p = 10; エラー p = &b; } int main(){ const int a = 10, b = 0; int const *p…

Numer0n

Numer0nは数当てゲームです。 コンピュータ戦のときは,コンピュータが決めた4桁の数をプレイヤーが当てようとします。 プレイヤーが何か4桁の数を一つ言うと,コンピュータはそれがどれくらい当たっているかを答えます。同じ桁に同じ数字があったら「EAT」…

競プロ用語

twitter上の競プロerの文化や,erが使っている用語を紹介しようと思います。 ・色 競プロのコンテストに出場すると,成績に応じてレートが変動します。レートは色分けされています。 例えばatcoderでは 色 レート 自由色 3200以上 赤 2800以上 オレンジ 2400…

競プロ

学校でパソコン同好会があり,僕はそのプログラミング部門で後輩に C/C++ を教えています。人にものを教えるというのは結構難しいんですね。 人にプログラミングを教えるにあたって最も苦労したのが「何を作ればいいのか分からない」ということ。 プログラム…