제출 #520230

#제출 시각아이디문제언어결과실행 시간메모리
520230kevinSkyscraper (JOI16_skyscraper)C++17
100 / 100
375 ms131980 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define nl cout<<"\n"
#define ca(v) for(auto i:v) cout<<i<<" ";

const int MOD = 1e9 + 7;

ll dp[102][102][1002][3];

int main()
{
    // ios_base::sync_with_stdio(0); cin.tie(0);
    if (fopen("input.in", "r")) freopen("input.in", "r", stdin);
    int n, l;
    cin>>n>>l;
    int ar[n];
    for(int i=0; i<n; i++) cin>>ar[i];
    if(n == 1) { cout<< 1; return 0; }
    sort(ar, ar+n);
    dp[0][0][0][0] = 1;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            for(int v=0; v<=l; v++){
                for(int r=0; r<3; r++){
                    int d = ar[i] - (i?ar[i-1]:0);
                    int nx = v + d * (j * 2 - r);
                    if(nx > l || nx < 0) continue;
                    // merge 2
                    if(j) dp[i+1][j-1][nx][r] = (dp[i+1][j-1][nx][r] + dp[i][j][v][r] * (j-1) % MOD) % MOD;
                    // add to exsisting
                    dp[i+1][j][nx][r] = (dp[i+1][j][nx][r] + dp[i][j][v][r] * (2*j-r) % MOD) % MOD;
                    // cout<<i+1<<"|"<<j<<"|"<<nx<<"|"<<r<<"|"<<dp[i+1][j][nx][r];
                    // add to exsisting and -1
                    if(r<2) dp[i+1][j][nx][r+1] = (dp[i+1][j][nx][r+1] + dp[i][j][v][r] * (2-r) % MOD) % MOD;
                    // make new
                    dp[i+1][j+1][nx][r] = (dp[i+1][j+1][nx][r] + dp[i][j][v][r] * (j+1-r) % MOD) % MOD;
                    // make new and -1
                    if(r<2) dp[i+1][j+1][nx][r+1] = (dp[i+1][j+1][nx][r+1] + dp[i][j][v][r] * (2-r) % MOD) % MOD;
                }
            }
        }
    }
    int tot = 0;
    for(int i=0; i<=l; i++) tot = (tot + dp[n][1][i][2]) % MOD;
    cout<<tot;
}

컴파일 시 표준 에러 (stderr) 메시지

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:15:40: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     if (fopen("input.in", "r")) freopen("input.in", "r", stdin);
      |                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...