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 | 71d1ec361fda9a119f31099a783b36cc814f4de8 (patch) | |
tree | b698d4f42dd525d1286154236641bfc3e68ceced /chuanzhi-cup/practice-contest/3.cpp | |
parent | 0d5160de7c120de4d7f7bb1344f205f1144afc1f (diff) | |
download | life-71d1ec361fda9a119f31099a783b36cc814f4de8.tar.gz life-71d1ec361fda9a119f31099a783b36cc814f4de8.tar.bz2 life-71d1ec361fda9a119f31099a783b36cc814f4de8.zip |
Add chuanzhi-cup codes.
Diffstat (limited to 'chuanzhi-cup/practice-contest/3.cpp')
-rw-r--r-- | chuanzhi-cup/practice-contest/3.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/chuanzhi-cup/practice-contest/3.cpp b/chuanzhi-cup/practice-contest/3.cpp new file mode 100644 index 0000000..1f79723 --- /dev/null +++ b/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;
+}
|