2016-10-25 4 views
0

때때로 'codeforces.org'에서 문제를 해결하고 모든 해결 후에 다른 사람들의 솔루션을 볼 수 있습니다. 그러나 대부분의 다른 솔루션에는 많은 코드가 포함되어 있습니다. 예 : 다음과 같이 문제 코드 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

많은 코더에는 실제로 대회를 위해 미리 정의 된 템플릿이 있습니다. 코드 포스에서는 대개 템플릿을 파일에 복사하기 만하기 때문에 코드를 작성하고 코드를 작성하려는 문제를 읽은 다음 코드를 작성하기도합니다.

그 코드 묶음은 실제로 자바에 대한 빠른 입력입니다. codeforces의 일부 문제점은이를 필요로합니다. Petr은 평소 템플릿을 복사하고 필요하지 않더라도 그곳에 문제를 코딩 했어야합니다. Petr이이 문제에 대해 특별히 작성한 실제 코드는 Solve이라는 3 개의 라인 함수였습니다.