文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

Java

Eclipseで作成したプログラムをコマンドプロンプトで実行する

前回作成したオセロのプログラムを、Eclipseではなくコマンドプロンプトから実行してみます。 jpliterature.hatenablog.com JARファイルを作成する ・プロジェクトを右クリック → エクスポート ・Java → Jarファイルを選択して次へ → エクスポート先を指定し…

Eclipseショートカット集

僕がEclipseでよく使っているショートカットをまとめてみました。 インデントを整理する(Ctrl + i) コードの切り貼りをしてインデントが崩れてしまった場合でも、このショートカットを実行すれば一発でインデントを正すことができます。 コメントアウト(C…

Javaで階乗を高速に求めるメソッドを作る

階乗を求めるアルゴリズムというと、再帰関数を用いたものが広く知られています。 static long factorial (int i) { if (i==1) {return 1;} else {return i*factorial(i-1);} } for文を用いても同様の計算ができますが、これらの 1*2*3*4......N と順番に乗…

Javaで素因数分解メソッドを作る

ある数を素因数分解して、その結果を返すメソッドを作ります。 素因数分解とは、Wikipediaによれば ・ある正の整数を素数の積の形で表すこと だそうです。ある数Nを ・N = 2^a * 3^b * 5^c * ...... を表すということですね。今回は、N をこの形で出力するメ…

[Java] 標準入力・標準出力の速度比較 [競技プログラミング]

以下の記事にもある通り、Java の Scanner は処理速度が遅いです。 qiita.com AtCoder にある Java のサンプルコードでは Scanner が使われていますし、Scanner を使ったら TLE してしまった……といった問題はまずないかと思いますが、いざというときのために…

Javaでnext_permutationメソッドを作ってみる

next_permutation は c++ の関数で、与えられた順列の次の順列を戻します(1234 → 1243)。 AtCoder のある問題を解くにあたってこの関数が必要になったので、Java には用意されてないのかな~と探してみましたが、私が探してみた限りでは存在していませんで…

ArrayListを使ってみる

docs.oracle.com ArrayListクラスはサイズ変更可能な配列です。サイズを超えて要素を追加しようとした場合には、配列と違ってサイズを自動で増やしてくれます。ところで、競プロでは Map や Set をよく使いますが、この ArrayList を使った記憶はほとんどな…

ScannerのhasNextメソッドの使い方

競プロの問題で入力を受け取る際には、最初に入力の総数を表す n が与えられ、その後にn個の入力が続けて与えられる、というパターンが多いです。この場合は、以下のように書くことで入力を受け取ることができます。 int n = sc.nextInt(); for (int i=0; i

System.out.println() は遅い?

競技プログラミングでは System.out.println() を使って解答を出力しますが、出力回数が数万・数十万回に及ぶような場合、実行時間がかかりすぎてしまうことがあるみたいです。例えば、以下のような問題です。 atcoder.jp この問題では Yes/No の出力を最大…