답안 #373911

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
373911 2021-03-06T03:41:04 Z jfyen A Huge Tower (CEOI10_tower) Java 11
100 / 100
573 ms 38320 KB
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;

public class tower {

	public static void main(String[] args) throws Exception{
		FastIO sc = new FastIO(System.in);
		int N = sc.nextInt();
		int D = sc.nextInt();
		long mod = 1000000009;
		int[] blocks = new int[N];
		for (int i = 0;i<N;i++) {
			blocks[i] = sc.nextInt();
		}
		Arrays.sort(blocks);
		long[] place = new long[N];
		long[] towers = new long[N];
		towers[0] = 1;
		//place[0] = 1;
		int lower = 0;
		for (int i = 0;i<N;i++) {
			while(lower<i) {
				if(blocks[lower]+D<blocks[i])
					lower++;
				else
					break;
			}
			//System.out.println(i+" "+lower);
			place[i] = (i-lower+1)%mod;
			if (i>0)
			towers[i] = (place[i]*towers[i-1])%mod;
		}
		//System.out.println(Arrays.toString(place));
		/*for (int i = 1;i<N;i++) {
			towers[i] = (place[i]*towers[i-1])%mod;
		}*/
		System.out.println(towers[N-1]%mod);
	}

	static class FastIO {

        InputStream dis;
        byte[] buffer = new byte[1 << 17];
        int pointer = 0;

        public FastIO(String fileName) throws Exception {
            dis = new FileInputStream(fileName);
        }

        public FastIO(InputStream is) throws Exception {
            dis = is;
        }

        int nextInt() throws Exception {
            int ret = 0;

            byte b;
            do {
                b = nextByte();
            } while (b <= ' ');
            boolean negative = false;
            if (b == '-') {
                negative = true;
                b = nextByte();
            }
            while (b >= '0' && b <= '9') {
                ret = 10 * ret + b - '0';
                b = nextByte();
            }

            return (negative) ? -ret : ret;
        }

        long nextLong() throws Exception {
            long ret = 0;

            byte b;
            do {
                b = nextByte();
            } while (b <= ' ');
            boolean negative = false;
            if (b == '-') {
                negative = true;
                b = nextByte();
            }
            while (b >= '0' && b <= '9') {
                ret = 10 * ret + b - '0';
                b = nextByte();
            }

            return (negative) ? -ret : ret;
        }

        byte nextByte() throws Exception {
            if (pointer == buffer.length) {
                dis.read(buffer, 0, buffer.length);
                pointer = 0;
            }
            return buffer[pointer++];
        }

        String next() throws Exception {
            StringBuffer ret = new StringBuffer();

            byte b;
            do {
                b = nextByte();
            } while (b <= ' ');
            while (b > ' ') {
                ret.appendCodePoint(b);
                b = nextByte();
            }

            return ret.toString();
        }

    }

	
}
# 결과 실행 시간 메모리 Grader output
1 Correct 84 ms 9172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 89 ms 9056 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 93 ms 9048 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 84 ms 8908 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 83 ms 8936 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 84 ms 9040 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 86 ms 8956 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 9124 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 82 ms 8908 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 85 ms 8828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 82 ms 9064 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 95 ms 8912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 84 ms 8936 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 85 ms 8828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 81 ms 9056 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 186 ms 17144 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 219 ms 18440 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 573 ms 21360 KB Output is correct
2 Correct 572 ms 21132 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 440 ms 24688 KB Output is correct
2 Correct 419 ms 27276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 471 ms 33648 KB Output is correct
2 Correct 527 ms 38320 KB Output is correct