2016-10-25 5 views
0

時には私は 'codeforces.org'の問題を解決し、すべての解決の後に私はothers.Butのソリューションの多くは非常に多くのコードを含んでいます。 例: 問題のコードを書いたDomino Piling次のようです。私たちが見るものcodeforcesで2位にランク人々は競合するプログラミングでソリューションを書くのに非常に多くのコードを使用するのはなぜですか?

import java.util.*; 

public class Main{ 
public static void main(String[] args){ 
    Scanner in = new Scanner(System.in); 
    int m = in.nextInt(), n = in.nextInt(); 
    int count = n*(m/2); 
    if(m%2 == 1) 
     count += n/2; 
    System.out.println(count); 
    in.close(); 
} 
} 

しかしpetrは、彼が糸を使用し、彼自身のカスタマイズされた入力/出力がtechnique.But私は理解しておりませんことをここで

import java.io.*; 
import java.util.*; 

public class Template implements Runnable { 
private void solve() throws IOException { 
    int n = nextInt(); 
    int m = nextInt(); 
    writer.println(n * m/2); 
} 

public static void main(String[] args) { 
    new Template().run(); 
} 

BufferedReader reader; 
StringTokenizer tokenizer; 
PrintWriter writer; 

public void run() { 
    try { 
     reader = new BufferedReader(new InputStreamReader(System.in)); 
     tokenizer = null; 
     writer = new PrintWriter(System.out); 
     solve(); 
     reader.close(); 
     writer.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.exit(1); 
    } 
} 

int nextInt() throws IOException { 
    return Integer.parseInt(nextToken()); 
} 

long nextLong() throws IOException { 
    return Long.parseLong(nextToken()); 
} 

double nextDouble() throws IOException { 
    return Double.parseDouble(nextToken()); 
} 

String nextToken() throws IOException { 
    while (tokenizer == null || !tokenizer.hasMoreTokens()) { 
     tokenizer = new StringTokenizer(reader.readLine()); 
    } 
    return tokenizer.nextToken(); 
} 
} 

のように、このソリューションを書いた理由は、彼このようなこのソリューションを解決し、独自のカスタマイズされたI/O技術の必要性は何ですか? 彼の長いコードに加えて、コードの実行時間が私よりも優れているということが私に最も印象的なことがあります。彼のコード実行時間は「90ミリ秒」で、私の時間は「248ミリ秒」です。

誰も私の理由を説明できますか?

+0

これはマルチスレッドではありません。彼はクラスのインスタンスを作成したので、各メソッドを静的にする必要はありません。私はなぜ彼が 'Runnable'を実装しているのか分かりません。 – Gendarme

+6

追加コードの大半は、スキャナの代わりに使用されるため、パフォーマンス面でより効率的です。おそらく、それぞれの問題に対して 'solve'の外にあるすべてのコードを再利用します。 – assylias

+1

このような課題に定期的に参加する人は、「テンプレート」という名前が示すように、事前に用意されたコードがすでにあるかもしれません。その後、数行だけカスタマイズする必要があります。 – user140547

答えて

0

多くのコーダーには、実際に競技用に事前定義されたテンプレートがあります。コードフォースでは、通常、そのテンプレートをファイルにコピーしてから、コード化したい問題を読み込んでからコード化します。

Javaのコードは、実際には高速入力です。コードフォースのいくつかの問題はそれを必要とします。 Petrは通常のテンプレートをコピーして、それが必要でない場合でもその問題をコード化しているに違いありません。この問題のためにPetrが書いた実際のコードは、Solveという3行の関数でした。

関連する問題