(UPD: 2024-12-04 14:48 UTC) Judge is not working due to Cloudflare incident. (URL) We can do nothing about it, sorry. After the incident is resolved, we will grade all submissions.

제출 #1118265

#제출 시각아이디문제언어결과실행 시간메모리
1118265vjudge1Skyscraper (JOI16_skyscraper)C++17
100 / 100
99 ms82772 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 arr[sz]; int dp[105][105][1005][5]; 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]=INF; 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 cost=(2*j-m)*(arr[i+1]-arr[i]); if(cost>k || (i+j+1-m)>n) continue; dp[i][j][k][m]+=dp[i-1][j-1][k-cost][m]+(2*j-m)*dp[i-1][j][k-cost][m]; if(m) dp[i][j][k][m]+=(3-m)*dp[i-1][j-1][k-cost][m-1]; if(m==1) dp[i][j][k][m]+=j*(2*dp[i-1][j][k-cost][m-1]+j*dp[i-1][j+1][k-cost][m]); else if(m==2) { if(i==n) dp[i][j][k][m]+=dp[i-1][j][k-cost][m-1]+dp[i-1][j+1][k-cost][m]; else if(j>1) dp[i][j][k][m]+=(j-1)*dp[i-1][j][k-cost][m-1]; if(i!=n) dp[i][j][k][m]+=j*(j-1)*dp[i-1][j+1][k-cost][m]; } else dp[i][j][k][m]+=j*(j+1)*dp[i-1][j+1][k-cost][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...