Submission #1118087

#TimeUsernameProblemLanguageResultExecution timeMemory
1118087huseynahmadli2010Skyscraper (JOI16_skyscraper)C++17
100 / 100
97 ms80860 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int sz=2e5+5; const int INF=1e18; const int MOD=1e9+7; int dp[105][105][1005][5]; int arr[sz]; void solve() { int n,l; cin>>n>>l; for(int i=1;i<=n;i++) cin>>arr[i]; if(n==1) { cout<<1; return; } sort(arr+1,arr+n+1); arr[n+1]=10000; dp[0][0][0][0]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { for(int k=0;k<=l;k++) { for(int m=0;m<3;m++) { int cur=(2*j-m)*(arr[i+1]-arr[i]); if(cur>k || i+j+1-m>n) continue; dp[i][j][k][m]+=dp[i-1][j-1][k-cur][m]; if(m) dp[i][j][k][m]+=(3-m)*dp[i-1][j-1][k-cur][m-1]; dp[i][j][k][m]+=(2*j-m)*dp[i-1][j][k-cur][m]; if(m==1) dp[i][j][k][m]+=2*j*dp[i-1][j][k-cur][m-1]; else if(m==2) { if(i==n) dp[i][j][k][m]+=dp[i-1][j][k-cur][m-1]; else if(j>1) dp[i][j][k][m]+=(j-1)*dp[i-1][j][k-cur][m-1]; } if(m==1) dp[i][j][k][m]+=j*j*dp[i-1][j+1][k-cur][m]; else if(m==2) { if(i==n) dp[i][j][k][m]+=dp[i-1][j+1][k-cur][m]; else dp[i][j][k][m]+=j*(j-1)*dp[i-1][j+1][k-cur][m]; } else dp[i][j][k][m]+=j*(j+1)*dp[i-1][j+1][k-cur][m]; dp[i][j][k][m]%=MOD; } } } } int res=0; for(int i=0;i<=l;i++) res+=dp[n][1][i][2]; cout<<res%MOD; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t=1; //cin>>t; while(t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...