제출 #1070236

#제출 시각아이디문제언어결과실행 시간메모리
1070236zh_hSnail (NOI18_snail)C++17
37 / 100
2 ms604 KiB
#include <bits/stdc++.h> #define lint long long #define pb push_back #define mp make_pair using namespace std; lint MOD = 1e9 + 7; int INF = 1e9; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); lint height, n; cin >> height >> n; //* while taking the input, find: //* 1. the average move per day //* 2. the highest that you can reach per day //* (and also which phase does it reach the highest) vector<lint> p; lint ave=0, highest=0; lint count=0; for(lint i = 0; i < n; i ++){ lint temp; cin >> temp; p.pb(temp); count += temp; if(count < 0){count = 0;} highest = max(highest, count); ave += temp; } if(highest >= height){ lint total = 0; for(lint i = 0; i < n; i ++){ total += p[i]; if(total < 0){total = 0;} if(total >= height){ cout << 0 << " " << i; break; } } } else if(ave <= 0){ cout << -1 << " " << -1; } else{ //* after N days //* at the N+1_th days, the snail reach the highest at some moment //* so basically, N*ave < height, N*ave + highest >= height //* search the N+1_th day //* first step: find smallest N such that N*ave >= height - highest //* can use binary search //* or just MATH lint N; //*ceil((height - highest)/ave; N = (height - highest + ave - 1) / ave; lint total = N*ave; for(lint i = 0; i < n; i ++){ total += p[i]; if(total < 0){total = 0;} if(total >= height){ cout << N << " " << i; break; } } } return 0; }
#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...