Submission #20378

#TimeUsernameProblemLanguageResultExecution timeMemory
20378admin복불복 (OJUZ11_luck)C++14
47 / 100
262 ms1 KiB
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; typedef long long ll; #define MOD (ll)(1e9+7) int N,K; const int MAX_N = 110; int a[MAX_N],b[MAX_N],c[MAX_N][MAX_N]; int s[MAX_N],e[MAX_N]; ll dp[1<<16]; ll f(int x,int bit){ if(x>N)return 1; ll& ret = dp[bit]; if(~ret)return ret; ret=0; for(int i=s[x];i<=e[x];i++){ if(bit>>i&1)continue; (ret+=f(x+1,bit|(1<<i)))%=MOD; } return ret; } int main(){ scanf("%d%d",&N,&K); for(int i=1;i<=N;i++){ scanf("%d",&a[i]); } sort(a+1,a+N+1); reverse(a+1,a+N+1); for(int j=1;j<=N;j++){ scanf("%d",&b[j]); } sort(b+1,b+N+1); reverse(b+1,b+N+1); for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++){ c[i][j]=a[i]+b[j]; } } ll ans=0; if(K==1){ for(int i=1;i<=N;i++){ ll sum=1; for(int j=2,p=i;j<=N;j++){ while(p>0&&c[j][p]<=c[1][i])p--; sum*=(N-p-j+1); sum%=MOD; } ans+=sum; ans%=MOD; } printf("%lld\n",ans); }else{ for(int i=1;i<=K;i++){ for(int j=1;j<=N;j++){ for(int k=1;k<=K;k++){ if(k==i){ s[k]=e[k]=j; continue; } int p=N; if(k>i)while(p>0&&c[k][p]<=c[i][j])p--; else while(p>0&&c[k][p]<c[i][j])p--; s[k]=1,e[k]=p; } for(int k=K+1;k<=N;k++){ int p=N; while(p>0&&c[k][p]<=c[i][j])p--; s[k]=p+1,e[k]=N; } memset(dp,-1,sizeof(dp)); (ans+=f(1,0))%=MOD; } } printf("%lld\n",ans); } return 0; }

Compilation message (stderr)

luck.cpp: In function 'int main()':
luck.cpp:29:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&N,&K);
                     ^
luck.cpp:32:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&a[i]);
                    ^
luck.cpp:38:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&b[j]);
                    ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...