読者です 読者をやめる 読者になる 読者になる

PaizaでJavaはどれだけのタイムがでるか?

Paiza Online Hackason Lite4

マンガ版「エンジニアでも恋がしたい!」〜転職初日にぶつかった女の子が同僚だった件〜|paizaオンラインハッカソン4 Lite

ここでちょっと気になったことがあるのでメモ程度に

Javaのタイム0.07sから縮まなくね?遅くね?

Twitterで検索しても大体の人は0.07どまりでJava()みたいに言われてたのでちょっと気になって調べました。

検証

case 1で検証します。
問題が非常に単純でアルゴリズムによる差がほぼ出ないことが期待できるためです。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

	int sum = 0;
        for(int i = 0; i < n; i++){
        	sum += Integer.parseInt(br.readLine());
        }

        System.out.println(sum);
    }
}

無難にやればこんな感じの回答になるかと思います。
これで提出するとこんな感じ。


マンガ版「エンジニアでも恋がしたい!」〜転職初日にぶつかった女の子が同僚だった件〜|paizaオンラインハッカソン4 Lite

全部0.07sで満点ですね。
これもうこれ以上短くするのは結構厳しいです。

でもそもそもこの0.07sってなんなの?気になりますよね

そこでイカのソースを使います。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;

public class Main {
    public static void main(String[] args) throws Exception {
    	Date start = new Date();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

	int sum = 0;
        for(int i = 0; i < n; i++){
        	sum += Integer.parseInt(br.readLine());
        }

        Date end = new Date();

        if( (end.getTime() - start.getTime()) <= 1 ) System.out.println(sum);

    }
}

これを実行すれば処理が1msより遅ければ答えが出力されないハードモードになります。
当店甘えは許しておりませんので。

これを実行した結果はこちら

マンガ版「エンジニアでも恋がしたい!」〜転職初日にぶつかった女の子が同僚だった件〜|paizaオンラインハッカソン4 Lite

なんと全部通っています!しかし0.07s変わらず!
これたぶんJVMの起動時間なんかも含まれているんじゃないかなって気がします。

ということでJavaで挑戦する人は0.07sに達していれば十分な速度を出せているといって問題ないかと思います。

ところで

そもそも0.07sでなんで遅いと思ったのかというのこれを見たからです。
※集計結果を詳しく見るを開いてください

天才火消しエンジニア霧島「もしPMおじさんが丸投げを覚えたら」|paizaオンラインハッカソンLite

0.01s早くね?この回答出した人やばくね?って思ったけどそもそもどうやってもこれでなくね?って話
ただしサーバーの混み具合等によって結果が変動することは明記されていますので、
空いてる時間にやればコレくらいの速度は出るものなのかもしれません。
つまりよりいい結果を出すには、空いている時間にいい結果がでるまでサーバーのご機嫌ガチャを回しまくるのが近道なのではないでしょうか。