Java初心者の競技プログラミング日記

Dvorak配列でjavaを書いてます

2018-02-01から1ヶ月間の記事一覧

倍数判定メソッド

long型に収まる数字ならlong型に入れて普通に割り算すればいいのだが、ここではlong型に入らない何千何万桁の数字が、ある数の倍数かどうかを判定するメソッドを紹介する。 static boolean isMultiple (String s, int base, int m) { int temp = 0; for (int…

yukicoder No.539 インクリメント

解くのに3時間くらいかかったが、得られたものはそこそこあった。 この問題、一見すると最後尾の整数を1増やせばいいだけのように思えるが、実際はもっと複雑な解法を要求されている。コードの中で一つ一つ解説する前に、大まかな攻略方針を示したいと思う。…

Javaで使える数学系メソッドまとめ

//最大公約数・最小公倍数(セットで使う) static int gcd (int a, int b) {return b>0?gcd(b,a%b):a;} static int lcm (int a, int b) {return a*b/gcd(a,b);} //素数判定 static boolean isPrime (int n) { if (n==2) return true; if (n<2 || n%2==0) re…

yukicoder No.652 E869120 and TimeZone

A問題に引き続いて時刻の問題。 import java.util.*; import static java.lang.System.*; public class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { int h = sc.nextInt(); int m = sc.nextInt(); String…

yukicoder No.651 E869120 and Driving

はじめてyukicoderコンテストに出場しました。結果はABC完答、DE放棄。 時速100kmでakm移動したときにかかる時間は。a/100時間。小数の問題があるのと、どちらにせよこのあと現在時刻にかかった時間を足して計算しなければならないので、分に直す。 目的地に…

「絶対・相対誤差10^(-n)以下であれば正答とみなされる」の意味

yukicoderで以下の問題を解いていて、一つ疑問に思ったので記事にすることにした。 No.379 五円硬貨 - yukicoder 問題文には「相対誤差または絶対誤差が10^(-12)以下であれば正答と見なされる」と書いてある。このとき、解答では小数点以下何桁まで出力する…

ローマ数字をアラビア数字に変換するメソッド

ローマ数字からアラビア数字に変換するメソッドと、アラビア数字からローマ数字に変換するメソッド。 static int RomanToArabic (String s) { String[] a = {"IV","IX","XL","XC","CD","CM"}; String[] b = {"IIII","VIIII","XXXX","LXXXX","CCCC","DCCCC"};…

yukicoder No.457 (^^*)

左カッコ一つ一つに対して、文字列の最後まで探索し、その間に現れる左向きと右向きの数を数え上げる。 import java.util.*; public class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { String s = sc.nex…

マップを値でソートするメソッド

追記:もっと簡単な書きかたを見つけました マップを値でソートする方法 - Java初心者の競技プログラミング日記 マップを値でソートするメソッド。上のメソッドは、マップを渡すと、値でソートされたマップが戻り値として返されるメソッド。下のメソッドは、…

ビット全探索

ビット全探索とは、二進数とビットを用いて、ある集合の部分集合を全列挙(全探索)するアルゴリズムのこと。 public class Blog { public static void main(String[] args) { //集合 String[] ar = {"a","b","c"}; //要素数 int n = 3; //以下メイン処理 fo…

迷路探索メソッド

迷路を探索するメソッド。 幅優先探索が分からなかったので、Listを使ってそれっぽく作ってみた。 以下のような問題で利用できる。 C: 幅優先探索 - AtCoder Beginner Contest 007 | AtCoder D: Grid Repainting - AtCoder Beginner Contest 088 | AtCoder …

AtCoder Beginner Contest 088

A - Infinite Coins import java.util.*; public class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { int n = sc.nextInt(); int a = sc.nextInt(); if (n%500 <= a) {System.out.println("Yes");} else {…

基数変換メソッド

n進数snをm進数に変換するメソッド。 使用できる基数(n,m)は2以上36以下。 static String BaseConversion (String sn, int n, int m) { String sm = Long.toString(Long.parseLong(sn,n),m); return sm; } 使用例 //10進数5を2進数に System.out.println(B…

Javaで基数変換(10進数からn進数、n進数から10進数)

yukicoderの[No.499 7進数変換]を解いていて、10進数で与えられる数値を7進数に変換する必要があったので、自分は数値を7で割りながらその余りを求めていく方法で解いた。以下がその僕の回答だ。 #236582 No.499 7進数変換 - yukicoderしかし調べていくと、…

yukicoder No.508 超ゆとり教育

解説にもある通り、与えられる面積の最高値(10^12)であっても、円周率を3として計算してみると、大体570000くらいになる。よって、たとえ1を出力しようが999を出力しようが、誤差は1000000以内に抑えられてしまう。1~1000001までの正整数を出力しておけば…

Javaの型変換について

Javaのデータ型は、基本型(プリミティブ型)や参照型、クラス型などさまざまに分類され、型変換のさいには山ほどの規則と注意点があるということなのだが、ここではとりあえず、それぞれの型同士の相互変換が成り立つか、成り立つとすればどのような方法で…

Mapをキーでソートする方法

マップをソートするには、まずキーをObject型の配列に格納し、配列をソートして、その配列をもとにしてマップから順番に値を取り出していく……ということを以前はやっていたのだが、よくよく調べてみると、自動でソートしてくれるTreeMapなるものが存在してい…

yukicoder No.628 Tagの勢い

要はどうやってマップを値でソートするか、だと思う。自分はマップを値でソートする方法が全く分かっていなかったので、これまでは、こういう問題が出たときには、キーに数値、値に文字列を入れてキーでソートして解いてきた。値でソートするよりも、キーで…

二点間の距離を求めるメソッド

二点間の距離には、ユークリッド距離とマンハッタン距離の二種類がある。・ユークリッド距離:二点間の最短距離 ・マンハッタン距離:座標軸に平行にのみ移動できる場合の最短距離以下のサイトで二種類の距離について詳しく解説されています L1距離(マンハ…

Javaプログラミング関連のウェブサイト

僕がよく参考にさせてもらっている、初心者がJavaプログラミングをするときに助けになるであろうウェブサイトへのリンクをまとめたものです。・コレクション(List,Map,Set) Javaコレクションクラスメモ(Hishidama's Java Collection Memo) ・正規表現 正規…

substringの範囲

いまいち分かりにくい、substringの範囲について。 例えば次のプログラム。 import java.util.*; public class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { String s = "abcde"; System.out.println(s.su…

memo

いつかは記事にしたい競プロ関係のアルゴリズムとかjavaの文法とかの備忘録です。 自分用です。 【メソッド・アルゴリズム】 ・二点間の距離(ユークリッド距離とマンハッタン距離) ・LinkedHashMapを上手く使えば、山札から一枚を一番上に持ってくる動作と…

大文字と小文字を逆転させるメソッド

英語アルファベットのみで構成される文字列の、大文字と小文字を逆転させるメソッド。 static String CaseReverse (String s) { StringBuilder sb = new StringBuilder(); for (int i=0; i

階乗を求めるメソッド

再帰関数を用いて階乗を求めるメソッド。 static long Factorial (int i) { if (i == 1) {return 1;} else {return i*Factorial(i-1);} } i=3のとき、 ・Factorial(3) = return 3*Factorial(2) ・Factorial(2) = return 2*Factorial(1) ・Factorial(1) = ret…

素数判定メソッド

値が素数かどうか判定するメソッド。 static boolean IsPrime(int n) { if (n < 2) return false; else if (n == 2) return true; else if (n%2 == 0) return false; double sqrtNum = Math.sqrt(n); for (int i=3; i<=sqrtNum; i+=2) { if (n%i == 0) {retu…

最大公約数・最小公倍数を求めるメソッド

ユークリッドの互除法を用いて、 二つの値の最大公約数および最小公倍数を求めるメソッド。 //最大公約数gcd static int gcd (int a, int b) { int temp; while((temp = a%b)!=0) { a = b; b = temp; } return b; } //最小公倍数lcm static int lcm (int a, …

回文判定メソッド

文字列が回文かどうか判定するためのメソッド。 static boolean isPalindrome (String s) { int n = s.length(); for (int i=0; i