Submission #681599

#TimeUsernameProblemLanguageResultExecution timeMemory
681599vjudge1Skyscraper (JOI16_skyscraper)C++14
20 / 100
2083 ms1332 KiB
#include <iostream> #include <algorithm> using namespace std; const int N = 100 +5; const int M = 1000 +5; const int mod = 1e9+7; typedef pair<int,int> pii; inline int add(int x, int y) { return (x+y>=mod ? x+y-mod : x+y); } inline int sub(int x, int y) { return (x-y<0 ? x-y+mod : x-y); } inline int gun(int x, int y) { return ((x*1ll*y)%mod); } int n,l; int a[N]; int dp[N][M][M][3]; bool vis[N][M][M][3]; int solve(int idx, int comps, int sum, int matha) { if(sum > l) return 0; if(comps < 0 || comps >n) return 0; if(comps == 0 && idx>0) return 0; if(matha > 2) return 0; if(idx==n) { if(comps == 1 && matha == 2) return 1; return 0; } int &ret = dp[idx][comps][sum][matha]; if(vis[idx][comps][sum][matha]) return ret; int prv = (idx-1>=0?a[idx-1] : 0); int notun = sum + (a[idx]-prv)*(2*comps - matha); int ans = 0; //Create ans = add(ans, gun(comps+1 - matha, solve(idx+1, comps+1, notun, matha))); //merge if(comps >= 2) ans = add(ans, gun(comps-1, solve(idx+1, comps-1, notun, matha)) ); //add if(comps>=1) ans = add(ans, gun(2*comps-matha, solve(idx+1, comps, notun, matha))); //notun matha ans = add(ans, gun(2-matha, solve(idx+1, comps+1, notun, matha+1))); //mathay lagao ans = add(ans, gun(2-matha, solve(idx+1, comps, notun, matha+1))); return ret = ans; } int32_t main() { cin>>n>>l; for(int i=0; i<n; i++) { cin>>a[i]; } sort(a,a+n); if(n==1) { cout<<"1\n"; return 0; } cout<<solve(0,0,0,0)<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...