Source code for submission s526

fs.cpp

  1. #include <algorithm>
  2. #include <cctype>
  3. #include <cmath>
  4. #include <complex>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <iomanip>
  8. #include <iostream>
  9. #include <list>
  10. #include <map>
  11. #include <queue>
  12. #include <set>
  13. #include <sstream>
  14. #include <stack>
  15. #include <string>
  16. #include <utility>
  17. #include <vector>
  18. using namespace std;
  19.  
  20. #define DEBUG(x) cout << ">>> " << #x << " : " << x << endl;
  21. #define REP(i,a) for (int i = 0; i < (a); ++i)
  22. #define FOR(i,a,b) for (int i = (a); i <= (b); ++i)
  23. #define FORD(i,a,b) for (int i = (a); i >= (b); --i)
  24. inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
  25.  
  26. const int INF = 1<<29;
  27. typedef long long ll;
  28. ///////////////////////////////////////////////////////////////////////////
  29.  
  30. string morse[][2] = {
  31. {"A", ".-"},
  32. {"B", "-..."},
  33. {"C", "-.-."},
  34. {"D", "-.."},
  35. {"E", "."},
  36. {"F", "..-."},
  37. {"G", "--."},
  38. {"H", "...."},
  39. {"I", ".."},
  40. {"J", ".---"},
  41. {"K", "-.-"},
  42. {"L", ".-.."},
  43. {"M", "--"},
  44. {"N", "-."},
  45. {"O", "---"},
  46. {"P", ".--."},
  47. {"Q", "--.-"},
  48. {"R", ".-."},
  49. {"S", "..."},
  50. {"T", "-"},
  51. {"U", "..-"},
  52. {"V", "...-"},
  53. {"W", ".--"},
  54. {"X", "-..-"},
  55. {"Y", "-.--"},
  56. {"Z", "--.."},
  57. {"_", "..--"},
  58. {".", "---."},
  59. {",", ".-.-"},
  60. {"?", "----"}
  61. };
  62. int M = 30;
  63.  
  64. const int MAX = 1024*6;
  65. char in[MAX], in2[MAX];
  66. int lens[MAX];
  67.  
  68. int main()
  69. {
  70. while (gets(in))
  71. {
  72. int len = strlen(in), len2 = 0;
  73. REP(i, len)
  74. {
  75. REP(j, M)
  76. if (morse[j][0][0] == in[i])
  77. {
  78. string & s = morse[j][1];
  79. lens[i] = s.size();
  80. REP(k, s.size())
  81. in2[len2++] = s[k];
  82. break;
  83. }
  84. }
  85. reverse(lens, lens+len);
  86. len = 0;
  87.  
  88. for (int i = 0; i < len2; i += lens[len++])
  89. {
  90. string s(in2+i, in2+i+lens[len]);
  91. REP(j, M)
  92. if (morse[j][1] == s)
  93. {
  94. in[len] = morse[j][0][0];
  95. break;
  96. }
  97. }
  98. printf("%s\n", in);
  99. }
  100.  
  101. return 0;
  102. }