Hướng dẫn giải của Tính toán sát thương


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Tác giả: KDA

Sau khi đọc đề qua, bạn có thể thấy những dữ liệu trong bài có thể biến thành một dạng công thức tính như sau:

$$ Output = DMG \times \left\{ \begin{array}{l} \displaystyle \frac{{100}}{{100 + Armor}},\,\,\,\,\,\,\,\,\,\,\,Armor \ge 0\\ 2 - \displaystyle \frac{{100}}{{100 - Armor}},\,Armor < 0 \end{array} \right. $$

Và nhiệm vụ của bạn bây giờ là từ công thức này hãy viết ra chương trình tính.

Code:

C++
#include<bits/stdc++.h>

using namespace std;

long long pd,md;
int pa,mr,t;
long double opd, omd;

signed main()
{
    cin>>t;
    while(t--){
        cin >> pd >> md >> pa >> mr;
        opd = pd * ((pa >= 0?((double) 100.0 / (100 + pa)):((double) (2.0 - (100.0 / (100 - pa))))));
        omd = md * ((mr >= 0?((double) 100.0 / (100 + mr)):((double) (2.0 - (100.0 / (100 - mr))))));
        cout << fixed << setprecision(6) << opd << " " << omd << "\n";
    }
}
Pascal
var pd,md: qword;
    pa,mr,t: integer;
    opd,omd: double;
function calc(arm: double):double;
begin
    if(arm < 0) then exit(2.0 - (100.0 / (100 - arm)))
    else exit(100.0 / (100 + arm));
end;
begin
    readln(t);
    while(t <> 0) do
    begin
        readln(pd,md,pa,mr);
        opd := calc(pa) * pd;
        omd := calc(mr) * md;
        writeln(opd:0:6,#32,omd:0:6);
        dec(t);
    end;
end.

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.