Advertisement
dmkozyrev

252b.cpp

May 7th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <tuple>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <string.h>
  5.  
  6. typedef std::tuple <long long, long long, int> Triple;
  7.  
  8. int main() {
  9.     int n;
  10.     scanf("%d", &n);
  11.    
  12.     std::vector<std::string> words(n);
  13.     std::vector<Triple> turples(n);
  14.    
  15.     for (int i = 0; i < n; ++i) {
  16.         long long a=0, b;
  17.        
  18.         char s[3], buf[10];
  19.         scanf("%I64d %2s", &b, s);
  20.        
  21.         sprintf(buf, "%I64d %s", b, s);
  22.         words[i] = buf;
  23.        
  24.         int slen = strlen(s);
  25.         int exp = (slen == 1 ? 3 : 0);
  26.         for (int i = 0; i < slen; ++i)
  27.             switch (s[i]) {
  28.                 case 'm': exp += 0; break;
  29.                 case 'k': exp += 6; break;
  30.                 case 'M': exp += 9; break;
  31.                 case 'G': exp += 12; break;
  32.                 case 'g': exp += 0; break;
  33.                 case 't': exp += 6; break;
  34.                 case 'p': exp += 1; b *= 1638; break;
  35.             }
  36.            
  37.         while (b < 1e11 && exp)
  38.             --exp, b *= 10;
  39.            
  40.         while (exp) {
  41.             b *= 10;
  42.             a = a * 10 + b / 1000000000000LL;
  43.             b %= 1000000000000LL;
  44.             --exp;
  45.         }
  46.                
  47.         turples[i] = std::make_tuple(a, b, i);
  48.     }
  49.        
  50.     std::sort(turples.begin(), turples.end());
  51.     for (auto & it : turples)
  52.         printf("%s\n", words[std::get<2>(it)].c_str());
  53.        
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement