Submission #772195

#TimeUsernameProblemLanguageResultExecution timeMemory
772195ttamxSkyscraper (JOI16_skyscraper)C++14
100 / 100
183 ms173772 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=105; const int M=1005; const int mod=1e9+7; struct mint{ int x; mint(ll x=0ll):x(x%mod){} void upd(){ if(x>=mod)x-=mod; if(x<0)x+=mod; } mint& operator+=(mint rhs){return x+=rhs.x,upd(),*this;} mint& operator-=(mint rhs){return x-=rhs.x,upd(),*this;} mint& operator*=(mint rhs){return x=(1ll*x*rhs.x)%mod,*this;} friend mint operator+(mint lhs,mint rhs){return lhs+=rhs;}; friend mint operator-(mint lhs,mint rhs){return lhs-=rhs;}; friend mint operator*(mint lhs,mint rhs){return lhs*=rhs;}; }; int n,l; int a[N]; mint dp[N][N][M][4]; mint ans; int main(){ cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> l; for(int i=1;i<=n;i++)cin >> a[i]; if(n==1)cout << 1,exit(0); sort(a+1,a+n+1); dp[1][1][0][0]=1; dp[1][1][0][1]=2; for(int i=2;i<=n;i++){ for(int j=1;j<i;j++){ for(int k=0;k<=l;k++){ for(int e=0;e<3;e++){ int res=k+(a[i]-a[i-1])*(2*j-e); if(res>l)continue; dp[i][j-1][res][e]+=dp[i-1][j][k][e]*(j-1); dp[i][j][res][e]+=dp[i-1][j][k][e]*(2*j-e); dp[i][j+1][res][e]+=dp[i-1][j][k][e]*(j+1-e); dp[i][j][res][e+1]+=dp[i-1][j][k][e]*(2-e); dp[i][j+1][res][e+1]+=dp[i-1][j][k][e]*(2-e); } } } } for(int i=0;i<=l;i++)ans+=dp[n][1][i][2]; cout << ans.x; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...