Hướng dẫn cho Orange Contest #02 - Phát Triển Dự Án AI
Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Authors:
Hãy xem xét cả hai phương án và chọn giá trị nhỏ nhất:
Nếu Nikita không sử dụng AI, mã nguồn được viết với tốc độ \(x + y\) dòng mỗi giờ, do đó tổng số giờ là \(⌈n / (x + y)⌉\);
Nếu Nikita sử dụng AI, thì trong \(z\) giờ đầu tiên, Maxim sẽ viết được \(x \cdot z\) dòng và còn lại \(n − x \cdot z\) dòng cần viết; sau đó, tốc độ tổng cộng sẽ là \(x + 10 \cdot y\) dòng mỗi giờ
Đáp án cần tìm sẽ là \(z + max(0, [(n − x \cdot z) / (x + 10 \cdot y)])\).
Giải pháp này có độ phức tạp O(1).
Code mẫu (C++):
C++
#include <bits/stdc++.h>
using namespace std;
#define int long long
int int_ceil(int x, int d){
return (x + d - 1) / d;
}
void solve(){
int n, x, y, t;
cin >> n >> x >> y >> t;
int ans = int_ceil(n, x + y);
if (t * x <= n){
ans = min(ans, int_ceil(n - t * x, x + 10 * y) + t);
}
cout << ans << '\n';
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int tests = 1;
cin >> tests;
while(tests--){
solve();
}
return 0;
}
Bình luận