답안 #136692

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
136692 2019-07-26T07:06:36 Z choikiwon A Huge Tower (CEOI10_tower) C++17
80 / 100
58 ms 16116 KB
#include<bits/stdc++.h>
using namespace std;

const int mod = 1e9 + 9;

int N, D;
vector<int> fact, A, B;

vector<vector<int> > cc;
int dp(int x, int cnt) {
    if(x == -1) return cnt % 2? mod - fact[N - cnt] : fact[N - cnt];
    int &ret = cc[x][cnt];
    if(ret != -1) return ret;

    ret = 0;
    ret += dp(x - 1, cnt);
    ret %= mod;
    if(B[x] > cnt) {
        ret += 1LL * dp(x - 1, cnt + 1) * (B[x] - cnt) % mod;
        ret %= mod;
    }
    return ret;
}

int main() {
    scanf("%d %d", &N, &D);

    if(N > 5000) {
        return 0;
    }
    
    fact.resize(N + 1);
    fact[0] = 1;
    for(int i = 1; i <= N; i++) {
        fact[i] = 1LL * fact[i - 1] * i % mod;
    }

    A.resize(N);
    for(int i = 0; i < N; i++) {
        scanf("%d", &A[i]);
    }

    sort(A.begin(), A.end());

    B.resize(N);
    int pos = N - 1;
    for(int i = N - 1; i >= 0; i--) {
        while(pos >= 0 && A[pos] > A[i] + D) pos--;
        B[i] = N - 1 - pos;
    }

    cc = vector<vector<int> >(N, vector<int>(N + 1, -1));
    printf("%d", dp(N - 1, 0));
}

Compilation message

tower.cpp: In function 'int main()':
tower.cpp:26:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &N, &D);
     ~~~~~^~~~~~~~~~~~~~~~~
tower.cpp:40:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &A[i]);
         ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 292 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 420 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 4368 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 58 ms 16116 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -