

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
`***` Trước tiên, bạn phải biết là tin không chấm code mà chấm theo test, cũng như là máy chấm chứ không phải người chấm.
Ví dụ trong đề bài của bạn, máy sẽ tạo một file TONG.INP, chạy code của bạn và kiểm tra xem file TONG.OUT có giống với kết quả không.
$\\$
`***` p <= là gì?
p <= cho biết trong test giới hạn của p là bao nhiêu.
Ví dụ trong đề bài của bạn có 1 `<=` p `<=` 30000 tức là sẽ không có test nào mà p có giá trị lớn hơn 30000 hay nhỏ hơn 1.
$\\$
`***` subtask là gì?
subtask cho biết sẽ có những test mà các giá trị trong đề bài nhỏ hơn phạm vi đã định ra trong đề bài.
Ví dụ trong đề bài của bạn có subtask:
`-` 85% số test có p, q <= 20000.
`-` 15% số test có p, q > 20000.
subtask này cho biết giả sử có 100 test thì sẽ có 85 test mà p, q không vượt quá 20000, 15 test còn lại có p, q không vượt quá giới hạn ở trên (tức là p, q <= 30000).
Và thông thường, nếu bạn giải được bao nhiêu % subtask thì bạn cũng sẽ nhận được chừng đó % số điểm toàn bài.
$\\$
`***` Bonus: Tại sao lại cần subtask?
Như bạn đã biết (hoặc chưa ?), một bài toán (tin) có thể có nhiều cách giải, nhưng không phải cách nào cũng tối ưu. Subtask phân ra các test để bạn có thể lựa chọn thuật toán thích hợp cho mình.
Ví dụ mình có một bài toán như sau:
Cho số N, in các số fibonacci N (in kết quả chia lấy dư cho `10^9+7`)
Subtask:
- 50% test có 1 `<=` N `<=` 10.
- 50% test có 1 `<=` N `<=` `10^5`.
Trong bài tập này, những ai chưa biết cách giải tối ưu có thể chọn một thuật toán đơn giản là đệ quy để lấy 50% số điểm của bài. Những ai biết cách giải tối ưu thì tất nhiên là lấy được 100% số điểm rồi. Nói chung là thường phân subtask để bạn lựa chọn thuật toán phù hợp để giải.
$\\$
$\\$
$\\$
$\color{#ffd710}{\texttt{\{}} \color{#8655d6}{\texttt{\{}}\ \ \color{#8cdcda}{\text{Daoanhviet96}}\ \ \color{#8655d6}{\texttt{\}}} \color{#ffd710}{\texttt{\}}}$
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin
0
45
0
còn nữa là có vài bài ghi là n <=10^5 còn a[i] thì <=10^9 thì đặt int hay long long vậy giải thích giúp mik ik
2901
47938
1864
n <= 10^5 có phải là khi nhập tới 10^5 thì nó vấn chạy thì mới đạt điểm đúng ko bạn? `->` <= tức là có thể bé hơn hoặc là bằng 10^5, cái này thì tùy giám khảo ra test thế nào, nhưng về cơ bản nếu chạy được 10^5 và chạy đúng thì các test khác cũng đúng (hoặc không do có thể sẽ có một vài test bẫy) Rút gọnn <= 10^5 có phải là khi nhập tới 10^5 thì nó vấn chạy thì mới đạt điểm đúng ko bạn? `->` <= tức là có thể bé hơn hoặc là bằng 10^5, cái này thì tùy giám khảo ra test thế nào, nhưng về cơ bản nếu chạy được 10^5 và chạy đúng thì các test khác cũng đúng ... xem thêm
2901
47938
1864
Nhưng cũng phải lưu ý một số giới hạn khác, như nếu bạn dùng C++ thì chương trình không được phép chạy quá 1s.
2901
47938
1864
còn nữa là có vài bài ghi là n <=10^5 còn a[i] thì <=10^9 thì đặt int hay long long vậy giải thích giúp mik ik `->` int có phạm vi là `-2^31` đến `2^31-1`, long long có phạm vi là `-2^63` đến `2^63-1`, cái này thì linh động một chút.
2901
47938
1864
Trong trường hợp trên thì n và a có thể sử dụng int, nhưng ví dụ bạn muốn tính tổng dãy a thì bạn phải đặt biến tổng là long long.
0
45
0
oh v tính tổng với nhân là dùng long long
0
45
0
đúng ko
2901
47938
1864
Bạn cứ canh thôi bạn, `2^31-1 ~~ 2*10^9`, nếu giá trị vượt quá ngưỡng `2*10^9` thì dùng long long. Ví dụ n <= 10^5 và a[i] <= 10^9 thì tổng mảng a có thể lên đến `10^5 * 10^9 = 10^14`, lúc này tổng vượt quá `2*10^9` nên phải dùng long long.