Submission #1118732

#TimeUsernameProblemLanguageResultExecution timeMemory
1118732MinbaevA Huge Tower (CEOI10_tower)C++17
20 / 100
319 ms262144 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #pragma GCC target("avx,avx2,fma") #pragma GCC optimize("Ofast,unroll-loops") using namespace std; using namespace __gnu_pbds; #define pb push_back #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define f first #define s second #define int long long #define ll long long #define pii pair<int,int> #define ar array #define mps make_pair template<class T>bool umax(T &a,T b){if(a<b){a=b;return true;}return false;} template<class T>bool umin(T &a,T b){if(b<a){a=b;return true;}return false;} template<class T> using ste = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>; const int inf = 3e18 + 7; const int mod = 1e9 + 7; const int N = 2e5 + 5; const int md = 998244353; int binpow(int a, int b, int m){ if(b == 0)return 1; if(b % 2 == 0){ int c = binpow(a,b/2,m); return (c*c)%m; } return (binpow(a,b-1,m)*a)%m; } int divi(int a, int b, int m){ return (a*(binpow(b,m-2, m)))%m; } int n,m,k,q; vector<int>g[21]; void solve(){ cin >> n >> k; vector<int>v(n); for(auto &to:v)cin >> to; int dp[(1<<n)][n]{}; for(int i = 0;i<n;i++){ dp[(1<<i)][i] = 1; } for(int mask = 1;mask<(1<<n);mask++){ vector<pii>vs; for(int i = 0;i<n;i++){ if(dp[mask][i] > 0)vs.pb({v[i], dp[mask][i]}); } sort(all(vs)); vector<int>pref(vs.size()); for(int i = 0;i<vs.size();i++){ pref[i] = ((i == 0) ? 0 : pref[i-1]); pref[i] += vs[i].s; pref[i] %= mod; } for(int i = 0;i<n;i++){ if(mask >> i & 1)continue; if(v[i] - vs[vs.size()-1].f > k)continue; int l = 0, r = vs.size(), ans = -1; while(l <= r){ int mid = (l+r)/2; if(v[i]-vs[mid].f <= k){ ans = mid; r = mid - 1; } else l = mid + 1; } int n_mask = (mask | (1<<i)); dp[n_mask][i] += pref[vs.size()-1] - ((ans == 0) ? 0 : pref[ans-1]); dp[n_mask][i] %= mod; } } int res = 0; for(int i = 0;i<n;i++){ res += dp[(1<<n)-1][i]; res %= mod; } cout << res << "\n"; } /* */ signed main() { // freopen("seq.in", "r", stdin); // freopen("seq.out", "w", stdout); ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL); int tt=1;//cin>>tt; while(tt--)solve(); }

Compilation message (stderr)

tower.cpp: In function 'void solve()':
tower.cpp:66:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |   for(int i = 0;i<vs.size();i++){
      |                 ~^~~~~~~~~~
#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...
#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...
#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...
#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...