Submission #367234

#TimeUsernameProblemLanguageResultExecution timeMemory
367234piddddgyCollecting Stamps 3 (JOI20_ho_t3)C++11
0 / 100
2079 ms424 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define cerr if(false) cerr #define watch(x) cerr << (#x) << " is " << (x) << endl; #define endl '\n' #define ld long double #define int long long #define pii pair<int, int> #define fi first #define se second #define sz(a) (int)(a).size() #define all(x) (x).begin(), (x).end() const int maxn = 15; bool vis[5000][maxn][300]; int n, l; int x[maxn], t[maxn]; int bits(int num) { int res = 0; for(int i = 0; i < 30; i++) { if(num & (1LL << i)) res++; } return res; } int ans = 0; void dfs(int mask, int cur, int time) { ans = max(ans, bits(mask)); cerr << "on " << cur << " with " << time << endl; for(int i = 0; i < n; i++) { if((1 << i) & mask) continue; int dis = abs(x[cur]- x[i]); dis = min(dis, l-dis); if(time+dis <= t[i]) { dfs(mask | (1 << i), i, time+dis); } } } signed main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> l; for(int i = 0; i < n; i++) { cin >> x[i]; } for(int i = 0; i < n; i++) { cin >> t[i]; } for(int i = 0; i < n; i++) { int dis = min(x[i], l-x[i]); if(dis <= t[i]) { dfs(1 << i, i, dis); } else { dfs(0, i, dis); } } cout << ans << endl; } /* [bitmask][current][time] 9 600 000 6 25 3 4 7 17 21 23 11 7 17 10 8 10 -> 4 Did you read the bounds? Did you make typos? Are there edge cases (N=1?) Are array sizes proper? Integer overflow? DS reset properly between test cases? Is using long longs causing TLE? Are you using floating points? */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...