-
또~~~~ 버 플로우(경우를 세는 경우 오버플로우 날 수 있다)실수모음 2023. 10. 17. 13:12
3079번: 입국심사
첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 1,000,000,000) 다음 N개 줄에는 각 심사대에서 심사를 하는데 걸리는 시간인 Tk가 주어진다. (1 ≤ Tk ≤ 109)
www.acmicpc.net
틀림(22번째 줄에서 오버플로우 남)
123456789101112131415161718192021222324252627282930313233#include <bits/stdc++.h>#define endl '\n' // don't use when you cover interactive problem#define all(v) v.begin(), v.end()using namespace std;typedef long long ll;int main() {ios::sync_with_stdio(false), cin.tie(0);ll N, M; cin >> N >> M;vector<ll> v(N);for(auto& i: v) cin >> i;ll lo = 1, hi = 1e18;ll ans = -1;while(lo <= hi){ll mid = (lo+hi)/2;ll cnt = 0;bool flag = false;for(auto& i: v){cnt += mid/i;}if(cnt >= M){ans = mid;hi = mid - 1;}else lo = mid + 1;}cout << ans << endl;return 0;}cs데이터 출처 https://www.acmicpc.net/board/view/88014
input.txt0.29MB다음과 같이 수정해야 맞는다
12345678910111213141516171819202122232425262728293031323334353637#include <bits/stdc++.h>#define endl '\n' // don't use when you cover interactive problem#define all(v) v.begin(), v.end()using namespace std;typedef long long ll;int main() {ios::sync_with_stdio(false), cin.tie(0);ll N, M; cin >> N >> M;vector<ll> v(N);for(auto& i: v) cin >> i;ll lo = 1, hi = 1e18;ll ans = -1;while(lo <= hi){ll mid = (lo+hi)/2;ll cnt = 0;bool flag = false;for(auto& i: v){cnt += mid/i;if(cnt >= M){flag = true;break;}}if(cnt >= M){ans = mid;hi = mid - 1;}else lo = mid + 1;}cout << ans << endl;return 0;}cs'실수모음' 카테고리의 다른 글
부동소수점 sqrt 연산은 정확하지 않다 (0) 2023.10.27 dfs를 이용한 완탐시, 방문 해제 모두 하고 return true (0) 2023.10.24 지문을 멋대로 해석해버린 예시 (0) 2023.09.22 [c++] round(-0.3)은 -0을 출력한다. 조심할 것 (0) 2023.09.05 1차원 dp를 사용할 땐, 중복 갱신에 주의해야 함(경우에 따라 역순으로 갱신할것) (0) 2023.08.28