aboutsummaryrefslogtreecommitdiff
path: root/chuanzhi-cup/practice-contest/3.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-02-24 00:36:15 +0800
committercrupest <crupest@outlook.com>2021-02-24 00:36:15 +0800
commit71d1ec361fda9a119f31099a783b36cc814f4de8 (patch)
treeb698d4f42dd525d1286154236641bfc3e68ceced /chuanzhi-cup/practice-contest/3.cpp
parent0d5160de7c120de4d7f7bb1344f205f1144afc1f (diff)
downloadlife-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.cpp38
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;
+}