Mèo béo ngốc ngếch Doraemon cho bạn 1 chiếc máy thử lòng tin. Chiếc máy có 2 cửa.
Nếu bạn bỏ vào cửa 1 xu, đối phương không bỏ xu, đối phương sẽ lãi 2 xu ở cửa bên kia và ngược lại, nếu đối phương bỏ vào 1 xu, bạn không bỏ xu vào, bạn cũng sẽ nhận được thêm 2 xu. Vấn đề ở chỗ bạn và đối thủ có quyền bỏ xu vào (hợp tác - mỗi người lãi 1 xu), hoặc không (gian lận - không ai có thêm xu nào).
Bây giờ bạn sẽ đấu lần lượt với 4 đối thủ với 4 "chiến thuật" khác nhau:
- Mai ngoc: cuộc sống toàn là màu hồng. Vì có tràn đầy niềm tin vào cuộc sống và hơi ngốc nghếch nên sẽ luôn luôn "hợp tác".
- VanHocvp: thà ta phụ người chứ không để người phụ ta! Không tin bất kì ai nên không "hợp tác" dưới mọi hình thức.
- TuDeepTry: thanh niên thù dai! Ban đầu sẽ "hợp tác", chỉ cần bạn "gian lận" 1 lần thì sẽ không bao giờ "hợp tác" nữa.
- TaiLe: Lượt đầu sẽ "hợp tác". Nếu bạn "hợp tác" thì sẽ "hợp tác" lại ở lượt tiếp theo, nhưng nếu bạn lừa TaiLe 2 lần liên tiếp thì gã sẽ "gian lận" để trả đũa ở lượt tiếp theo.
Với mỗi đối thủ, bạn sẽ đấu số lượt lần lượt là: ~x1, x2, x3, x4~.
Ban đầu bạn có 1 xu, hãy tính xem sau khi thi đấu bạn sẽ giành được tối đa bao nhiêuxu.
Input
1 dòng duy nhất chứa 4 số: ~x1, x2, x3, x4~ là số lượt đấu với đối thủ 1, 2, 3, 4.(~0 \le x1, x2, x3, x4 \le 100~)
Output
1 dòng duy nhất là số xu tối đa thắng được khi chơi.
Sample
Input #1
10 10 10 10
Output #1
47
Input #2
5 6 7 8
Output #2
31
Problem source: CLB Lập Trình PTIT
Bình luận
code cho ai cần #include <bits/stdc++.h> using namespace std;
define int long long
int chan(int n){ int tong = 0; while(n != 0){ if(n % 2 == 0){ tong += 2; n--; }else{ tong += 1; n--; } } return tong + 1; } int le(int n){ int tong = 0; while(n != 0){ if(n % 2 == 1){ tong += 1; n--; }else{ tong += 2; n--; } } return tong + 1; } signed main() { cin.tie(0)->syncwithstdio(0); int a,b,c,d; cin >> a >> b >> c >> d; int tong = 0; if(d % 2 == 0){ tong += chan(d); }else{ tong += le(d); } tong += (a * 2); tong += (c + 1); cout << tong << '\n'; return 0; }
vd test1 :
Với đối thủ Mai Ngoc : vì nó luôn luôn hợp tác nên chúng ta sẽ gian lận trong tất cả lượt chơi, như vậy sau mỗi lược chúng ta thu được 2 xu hoàn toàn free, số xu thu được là 2*số lượt chơi.
VanHocvp : thằng này chúng ta coi như nó không có, bởi vì nó không bao giờ hợp tác nên chúng ta sẽ không thu được gì từ nó :)).
Tudeeptrai: thanh niên này chỉ cần chúng ta gian lận "1 lần" thì nó sẽ không bao giờ hợp tác nữa, như vậy thì chúng ta sẽ hợp tác hết và sẽ gian lận ở lượt chơi cuối cùng, số xu thu được : số lượt chơi+1.
TaiLe: không biết giải thích sao nữa nhưng số xu thu được là số lượt chơi+(số lượt chơi/2)
bổ sung là sẽ bo xì không chơi với thằng VanHoc nhưng vẫn hold được 1 xu ban đầu được cho nên vẫn xu+=1
Để giải bài toán này, chúng ta sẽ xem xét cách đối phó với từng đối thủ một cách chi tiết:
Với 1000 lượt đấu, bạn sẽ nhận được 1000 xu.
Đối thủ VanHocvp:
Với 1000 lượt đấu, bạn sẽ nhận được 2000 xu.
Đối thủ TuDeepTry:
Với 1000 lượt đấu, bạn sẽ nhận được 1000 xu.
Đối thủ TaiLe:
Tổng kết, sau khi đấu với 4 đối thủ, bạn sẽ giành được tối đa 6500 xu. Đó chính là số xu tối đa bạn có thể giành được theo chiến thuật đấu với từng đối thủ như đã mô tả.