자바 ACM 경기 IO 페 트 르 템 플 릿 최적화

8206 단어 misc
ACMer 가 자바 를 사용 할 때 시간 초과 현상 을 많이 만 났 을 거 라 고 믿 습 니 다. 오늘 CF 를 할 때 만 났 습 니 다. $10 ^ 5 $Int 가 1s 를 초과 해서 참 을 수 없습니다. 여기에 petr 사내 의 템 플 릿 을 남 겼 습 니 다. 과연 속도 가 10 배 올 랐 습 니 다.
입력
수출
예.
입력
class InputReader{
    private final static int BUF_SZ = 65536;
    BufferedReader in;
    StringTokenizer tokenizer;
    public InputReader(InputStream in) {
        super();
        this.in = new BufferedReader(new InputStreamReader(in),BUF_SZ);
        tokenizer = new StringTokenizer("");
    }
    private String next() {
        while (!tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(in.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return tokenizer.nextToken();
    }
    public int nextInt() {
        return Integer.parseInt(next());
    }
}

StringTokenizer BufferedReader
출력
출력 이 비교적 간단 하고 직접 사용 합 니 다.

    public static InputReader in = new InputReader(System.in);
    public static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

예시
CF 980 C. Posterized
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;




public class Main {
    public static final int INF = 0x3f3f3f3f;
    public static InputReader in = new InputReader(System.in);
    public static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    public static void main(String[] args) {
        int n = in.nextInt();
        int k = in.nextInt();
        int[] p = new int[n];
        for(int i=0 ; inew Solution(n, k, p);
        solver.solve();
        for(int i=0 ; i" ");
        out.flush();
        out.close();
    }
}

class Solution{
    int n,k;
    int[] p;
    int[] ans;
    public Solution(int n, int k, int[] p) {
        super();
        this.n = n;
        this.k = k;
        this.p = p;
        ans = new int[256];
        Arrays.fill(ans, -1);
    }

    public void solve() {
        ans[0] =0;
        for(int i=0 ; iint ret =0;
            if(ans[p[i]]!=-1)continue;
            int lower = Math.max(-1, p[i]-k);
            for(ret = p[i] ; ret >lower ; --ret){
                if(ans[ret] !=-1){
                    if(ans[ret] > lower){
                        ret = ans[ret];
                    }else ret++;
                    break;
                }
            }
            ret = Math.max(ret, lower+1);
            for(int j=ret ; j<=p[i] ; ++j)ans[j] = ret;
        }
    }
}

class InputReader{
    private final static int BUF_SZ = 65536;
    BufferedReader in;
    StringTokenizer tokenizer;
    public InputReader(InputStream in) {
        super();
        this.in = new BufferedReader(new InputStreamReader(in),BUF_SZ);
        tokenizer = new StringTokenizer("");
    }
    private String next() {
        while (!tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(in.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return tokenizer.nextToken();
    }
    public int nextInt() {
        return Integer.parseInt(next());
    }
}

좋은 웹페이지 즐겨찾기