Submission #59519

#TimeUsernameProblemLanguageResultExecution timeMemory
59519aloomyaSkyscraper (JOI16_skyscraper)C++14
20 / 100
1154 ms190576 KiB
//in the name of Allah #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ll long long #define ld long double #define pii pair<int,int> #define F first #define S second #define pb push_back #define req(i,s,e) for(int i=s;i<e;i++) #define reqd(i,s,e,d) for(int i=s;i<e;i+=d) #define Init ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); using namespace std; using namespace __gnu_pbds; template<typename T> using ordered_set = tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>; const int MX = 20*1000 + 100,mod = 1000 * 1000 * 1000 + 7; int dp[MX][1100][20]; int inp[MX]; int d(int a, int b){ return abs(inp[a]-inp[b]); } int32_t main(){ int n,l; cin>>n>>l; req(i,0,n){ cin>>inp[i]; } int r = 1<<n; req(i,1,r){ if(__builtin_popcount(i)==1){ req(j,0,n){ if( i && (1<<j)) dp[i][0][j]=1; } }else{ req(j,1,l+1){ req(k,0,n){ if(i & (1<<k)){ req(h,0,n){ if(h!=k && i&(1<<h) && j-d(k,h)>-1){ dp[i][j][k]= (dp[i][j][k]+ dp[i^(1<<k)][j-d(k,h)][h])%mod; } } } } } } } int ans= 0; req(i,0,n){ req(j,0,l+1){ ans =(ans+ dp[(1<<n)-1][j][i])%mod; } } cout<<ans<<endl; }

Compilation message (stderr)

skyscraper.cpp: In function 'int32_t main()':
skyscraper.cpp:34:17: warning: '<<' in boolean context, did you mean '<' ? [-Wint-in-bool-context]
     if( i  && (1<<j))
               ~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...