Submission #362506

#TimeUsernameProblemLanguageResultExecution timeMemory
362506denkendoemeerSkyscraper (JOI16_skyscraper)C++14
100 / 100
234 ms260652 KiB
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
using namespace std;
int v[105],n,l;
ll dp[105][105][1005][3];
ll calc(int i,int j,int k,int nr)
{
    if (i && (j<=0 || nr>2))
        return 0;
    ll &ans=dp[i][j][k][nr];
    if (ans!=-1)
        return ans;
    if (i==n)
        return (j==1 && nr==2);
    int aux=(v[i+1]-v[i])*(2*j-nr)+k;
    if (aux>l)
        return 0;
    ans=(2*j-nr)*calc(i+1,j,aux,nr)%mod;
    ans=(ans+(2-nr)*calc(i+1,j+1,aux,nr+1))%mod;
    ans=(ans+(2-nr)*calc(i+1,j,aux,nr+1))%mod;
    ans=(ans+(j+1-nr)*calc(i+1,j+1,aux,nr))%mod;
    ans=(ans+(j-1)*calc(i+1,j-1,aux,nr))%mod;
    return ans;
}
int main()
{
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    int i;
    scanf("%d%d",&n,&l);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    sort(v+1,v+n+1);
    v[0]=v[1];
    memset(dp,-1,sizeof(dp));
    if (n==1){
        printf("1\n");
    }
    else
        printf("%lld\n",calc(0,0,0,0));
return 0;
}

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:31:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   31 |     scanf("%d%d",&n,&l);
      |     ~~~~~^~~~~~~~~~~~~~
skyscraper.cpp:33:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   33 |         scanf("%d",&v[i]);
      |         ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...