aboutsummaryrefslogtreecommitdiff
path: root/works/life/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
commit90375859767eb4cae3a7a93c64725b504d7f0fe0 (patch)
treef8fcda952bbd2bbd9a6d9a2a2dfad1cb99d5d624 /works/life/chuanzhi-cup/practice-contest/3.cpp
parent93b0dad49c78c22cda374239eda5a77baeb358b1 (diff)
downloadcrupest-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.cpp38
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;
+}