답안 #136690

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
136690 2019-07-26T07:04:59 Z choikiwon A Huge Tower (CEOI10_tower) C++17
80 / 100
365 ms 262148 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);

    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:36: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 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 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 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 248 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 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 4344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 16228 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 229 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
# 결과 실행 시간 메모리 Grader output
1 Runtime error 271 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 292 ms 262144 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 365 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -