Source code for submission s449

Go to diff to previous submission

fl.cpp

  1. #include <cstdio>
  2. #include <vector>
  3. #include <utility>
  4. #include <cstring>
  5.  
  6. int gcd(int a, int b)
  7. {
  8. if (a == b)
  9. return a;
  10. else if (a > b)
  11. return gcd(a -b, b);
  12. else
  13. return gcd(a, b - a);
  14. }
  15.  
  16. int findlcm(int a, int b)
  17. {
  18. return a * b / gcd(a, b);
  19. }
  20.  
  21. int main()
  22. {
  23. int k, bl;
  24.  
  25. unsigned int results[10010];
  26. memset(results, 0, sizeof(results));
  27.  
  28. while (scanf("%d/%d", &bl, &k) == 2)
  29. {
  30. unsigned int result;
  31. if (results[k] > 0)
  32. {
  33. result = results[k];
  34. }
  35. else
  36. {
  37. std::vector< std::pair<int, int> > egypt;
  38. for (int i = k + 1; i <= 2 * k; i++)
  39. {
  40. int lcm = findlcm(i, k);
  41. int nom = (lcm / k) - (lcm / i);
  42. if (lcm % nom == 0)
  43. egypt.push_back(std::make_pair(lcm / nom, 1));
  44. }
  45. result = egypt.size();
  46. results[k] = result;
  47. }
  48.  
  49. printf("%u\n", result);
  50. }
  51. }
  52.  

Diff to submission s448

fl.cpp

--- c5.s448.cteam063.fl.cpp.0.fl.cpp
+++ c5.s449.cteam063.fl.cpp.0.fl.cpp
@@ -2,4 +2,5 @@
 #include <vector>
 #include <utility>
+#include <cstring>
 
 int gcd(int a, int b)
@@ -21,16 +22,30 @@
 {
         int k, bl;
+        
+        unsigned int results[10010];
+        memset(results, 0, sizeof(results));
+        
         while (scanf("%d/%d", &bl, &k) == 2)
         {
-                std::vector< std::pair<int, int> > egypt;
-                for (int i = k + 1; i <= 2 * k; i++)
+                unsigned int result;
+                if (results[k] > 0)
                 {
-                        int lcm = findlcm(i, k);
-                        int nom = (lcm / k) - (lcm / i);
-                        if (lcm % nom == 0)
-                                egypt.push_back(std::make_pair(lcm / nom, 1));
+                        result = results[k];
+                }
+                else
+                {
+                        std::vector< std::pair<int, int> > egypt;
+                        for (int i = k + 1; i <= 2 * k; i++)
+                        {
+                                int lcm = findlcm(i, k);
+                                int nom = (lcm / k) - (lcm / i);
+                                if (lcm % nom == 0)
+                                        egypt.push_back(std::make_pair(lcm / nom, 1));
+                        }
+                        result = egypt.size();
+                        results[k] = result;
                 }
                 
-                printf("%u\n", egypt.size());
+                printf("%u\n", result);
         }
 }