Submission #981993

#TimeUsernameProblemLanguageResultExecution timeMemory
981993dimashhhSkyscraper (JOI16_skyscraper)C++17
20 / 100
2089 ms386844 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]; map<int,int> dp[N][N][2][2]; 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; } dp[1][1][0][0][-a[1] * 2] = 1; dp[1][1][0][1][-a[1]] = dp[1][1][1][0][-a[1]] = 1; for(int i = 1;i <= n;i++){ a[i] = a[i+1]; for(int j = 1;j <= i;j++){ for(int s = 0;s < 2;s++){ for(int t = 0;t < 2;t++){ for(auto [k,d]:dp[i][j][s][t]){ // cout << i << ' ' << j << ' ' << s << ' ' << t << ' ' << k << ' ' << d << '\n'; {//new add(dp[i+1][j+1][s][t][k-a[i]*2],d*1ll*(j+1-s-t)%MOD); if(!s){ add(dp[i+1][j+1][1][t][k-a[i]],d); } if(!t){ add(dp[i+1][j+1][s][1][k-a[i]],d); } } {//merge add(dp[i+1][j-1][s][t][k+a[i]*2],d*1ll*(j-1)%MOD); } {//corner add(dp[i+1][j][s][t][k],d*1ll*(j*2-s-t)%MOD); if(!s){ add(dp[i+1][j][1][t][k+a[i]],d); } if(!t){ add(dp[i+1][j][s][1][k+a[i]],d); } } } } } } } int ans = 0; for(auto [x,y]:dp[n][1][1][1]){ if(x <= l && x >= 0){ add(ans,y); } } 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...