Submission #982623

#TimeUsernameProblemLanguageResultExecution timeMemory
982623dimashhhSkyscraper (JOI16_skyscraper)C++17
100 / 100
168 ms87232 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e2 + 5, MOD = 1e9 + 7; int n,l,a[N]; int dp[N][N][2][2][N*10]; void add(int &x,int y){ x += y; if(x >= MOD) x -= MOD; } void test(){ cin >> n >> l; for(int i = 1;i <= n;i++) { cin >> a[i]; } sort(a + 1,a + n + 1); if(n == 1) { cout << 1; return; } if(a[2] - a[1] + a[2] - a[1] <= l) dp[2][1][0][0][(a[2]-a[1])*2] = 1; if(a[2] - a[1] <= l) dp[2][1][0][1][a[2]-a[1]] = dp[2][1][1][0][a[2]-a[1]] = 1; a[n+1] = 10000; for(int i = 2;i <= n;i++){ for(int j = 1;j <= i;j++){ for(int s = 0;s < 2;s++){ for(int t = 0;t < 2;t++){ for(int k = 0;k <= l;k++){ int d = dp[i][j][s][t][k]; ll val = (a[i+1]-a[i]); {//new if(k+val*((j+1)*2-s-t) <= l) add(dp[i+1][j+1][s][t][k+val*((j+1)*2-s-t)],d*1ll*(j+1-s-t)%MOD); if(!s){ if(k+val*((j+1)*2-1-t) <=l)add(dp[i+1][j+1][1][t][k+val*((j+1)*2-1-t)],d); } if(!t){ if(k+val*((j+1)*2-1-s) <= l)add(dp[i+1][j+1][s][1][k+val*((j+1)*2-1-s)],d); } } {//merge if(k+val*((j-1)*2-s-t)<=l)add(dp[i+1][j-1][s][t][k+val*((j-1)*2-s-t)],d*1ll*(j-1)%MOD); } {//corner if(k+val*(2*j-s-t) <= l) add(dp[i+1][j][s][t][k+val*(2*j-s-t)],d*1ll*(j*2-s-t)%MOD); if(!s){ if(k+val*(2*j-1-t) <= l) add(dp[i+1][j][1][t][k+val*(2*j-1-t)],d); } if(!t){ if(k+val*(2*j-1-s) <= l) add(dp[i+1][j][s][1][k+val*(2*j-1-s)],d); } } } } } } } int ans = 0; for(int i = 1;i <= l;i++){ add(ans,dp[n + 1][1][1][1][i]); } cout << ans; } int main(){ ios_base::sync_with_stdio(false);cin.tie(0); int T = 1; // cin >> T; while (T--){ test(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...