이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=1e9+7;
int add(int x, int y){ x+=y;return x>=mod?x-mod:x;}
int sub(int x, int y){ x-=y;return x<0?x+mod:x;}
int mul(int x, int y){ return (ll)x*y%mod;}
const int N=105;
map<int,int> dp[N][N][2][2];
int a[N];
int main()
{
int n,i,L;
scanf("%i %i",&n,&L);
for(i=1;i<=n;i++) scanf("%i",&a[i]);
sort(a+1,a+1+n);
dp[1][1][0][0][-2*a[1]]=1;
dp[1][1][1][0][-a[1]]=1;
dp[1][1][0][1][-a[1]]=1;
dp[1][1][1][1][0]=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int l=0;l<2;l++)
{
for(int r=0;r<2;r++)
{
for(auto d:dp[i-1][j][l][r])
{
int k=d.first;
int val=d.second;
if(k>L) break;// || k+(j*2-l-r)*a[i]>L) break;
//printf("i:%i j:%i l:%i r:%i k:%i val:%i\n",i-1,j,l,r,k,val);
//Extend
dp[i][j][l][r][k]=add(dp[i][j][l][r][k],mul(val,j*2-l-r));
//Left End
if(!l) dp[i][j][1][r][k+a[i]]=add(dp[i][j][1][r][k+a[i]],val);
//Right End
if(!r) dp[i][j][l][1][k+a[i]]=add(dp[i][j][l][1][k+a[i]],val);
//New Chain
dp[i][j+1][l][r][k-2*a[i]]=add(dp[i][j+1][l][r][k-2*a[i]],mul(j+1-l-r,val));
if(!l) dp[i][j+1][1][r][k-a[i]]=add(dp[i][j+1][1][r][k-a[i]],val);
if(!r) dp[i][j+1][l][1][k-a[i]]=add(dp[i][j+1][l][1][k-a[i]],val);
//Connect
if(j>1) dp[i][j-1][l][r][k+2*a[i]]=add(dp[i][j-1][l][r][k+2*a[i]],mul(j-1,val));
}
}
}
}
}
int ans=0;
for(auto d:dp[n][1][1][1])
{
int k=d.first;
int val=d.second;
if(k<=L) ans=add(ans,val);
//printf("(%i %i)\n",k,val);
}
printf("%i\n",ans);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
skyscraper.cpp: In function 'int main()':
skyscraper.cpp:14:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%i %i",&n,&L);
~~~~~^~~~~~~~~~~~~~~
skyscraper.cpp:15:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
for(i=1;i<=n;i++) scanf("%i",&a[i]);
~~~~~^~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |