diff options
author | crupest <crupest@outlook.com> | 2021-02-24 00:36:15 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-02-24 00:36:15 +0800 |
commit | 90375859767eb4cae3a7a93c64725b504d7f0fe0 (patch) | |
tree | f8fcda952bbd2bbd9a6d9a2a2dfad1cb99d5d624 /works/life/chuanzhi-cup/practice-contest/3.cpp | |
parent | 93b0dad49c78c22cda374239eda5a77baeb358b1 (diff) | |
download | crupest-90375859767eb4cae3a7a93c64725b504d7f0fe0.tar.gz crupest-90375859767eb4cae3a7a93c64725b504d7f0fe0.tar.bz2 crupest-90375859767eb4cae3a7a93c64725b504d7f0fe0.zip |
import(life): Add chuanzhi-cup codes.
Diffstat (limited to 'works/life/chuanzhi-cup/practice-contest/3.cpp')
-rw-r--r-- | works/life/chuanzhi-cup/practice-contest/3.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/works/life/chuanzhi-cup/practice-contest/3.cpp b/works/life/chuanzhi-cup/practice-contest/3.cpp new file mode 100644 index 0000000..1f79723 --- /dev/null +++ b/works/life/chuanzhi-cup/practice-contest/3.cpp @@ -0,0 +1,38 @@ +#include <cmath>
+#include <iomanip>
+#include <iostream>
+#include <regex>
+#include <string>
+
+int main() {
+ std::string input;
+ std::getline(std::cin, input);
+
+ std::regex reg(R"aaa((\d+)([GMK]?B)=\?([GMK]?B))aaa");
+ std::smatch match;
+ std::regex_match(input, match, reg);
+
+ std::string original_number_str = match[1].str();
+ std::string original_unit = match[2].str();
+ std::string target_unit = match[3].str();
+
+ double original_number = std::stod(original_number_str);
+
+ auto to_ratio = [](const std::string s) -> double {
+ if (s.size() == 1)
+ return 1;
+ if (s[0] == 'G')
+ return std::pow(2, 30);
+ if (s[0] == 'M')
+ return std::pow(2, 20);
+ return std::pow(2, 10);
+ };
+
+ double original_ratio = to_ratio(original_unit);
+ double target_ratio = to_ratio(target_unit);
+
+ std::cout << std::fixed << std::setprecision(6)
+ << (original_number * original_ratio / target_ratio);
+
+ return 0;
+}
|