Submission #1011714

#TimeUsernameProblemLanguageResultExecution timeMemory
1011714BzslayedSnail (NOI18_snail)C++17
100 / 100
1 ms604 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; #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #define ll long long #define ull unsigned long long #define ld long double #define pll pair<ll, ll> #define pii pair<int, int> #define coutpair(p) cout << p.first << " " << p.second << "|" template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; template<class T> using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll h, n; cin >> h >> n; ll a[n]; ll fday = 0, sday = 0, mx = 0; //first day and subsequent days for (int i=0; i<n; i++){ cin >> a[i]; fday += a[i]; fday = max(fday, 0LL); sday += a[i]; mx = max(mx, sday); if (fday >= h){ cout << 0 << " " << i; return 0; } } ll rh = h-fday; //cout << rh << " " << mx << "\n"; if (rh <= mx){ for (int i=0; i<n; i++){ rh -= a[i]; if (rh <= 0){ cout << 1 << " " << i; return 0; } } } if (sday <= 0){ cout << -1 << " " << -1; return 0; } rh = h-fday; //remaining height to climb for subsequent days, excluding first day ll days = (rh-mx+sday-1)/sday; //number of "full" days required ll rem = rh-days*sday; //remaining height to climb on final day //cout << fday << " " << sday << " " << mx << " " << days << " " << rem << "\n"; for (int i=0; i<n; i++){ rem -= a[i]; if (rem <= 0){ cout << days+1 << " " << i; return 0; } } return 0; } /* Edge case to consider: 5 5 1 1 1 -10 2 So need to simulate 2 times at the beginning to ensure this case is covered. */
#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...