Source code for submission s519

fs.cpp

  1.  
  2.  
  3. #include<cstdio>
  4. #include<cstdlib>
  5. #include<cstring>
  6.  
  7. #include<cmath>
  8. #include<cctype>
  9. #include<climits>
  10. #include<algorithm>
  11. #include<utility>
  12. #include<string>
  13.  
  14. #include<deque>
  15. #include<list>
  16. #include<map>
  17.  
  18. #include<queue>
  19. #include<set>
  20. #include<stack>
  21. #include<vector>
  22.  
  23.  
  24. using namespace std;
  25.  
  26. #define REP(i,N) for (int i = 0; i < (N); i++)
  27. #define FOR(i,a,b) for (int i = (a); i <= (b); i++)
  28. #define FORI(i,a,b) for (int i = (a); i < (b); i++)
  29. #define FORD(i,a,b) for (int i = (a)-1; i >= (b); i--)
  30. #define DP(arg...) fprintf(stderr, ## arg)
  31.  
  32. typedef long long ll;
  33. typedef long double ld;
  34. typedef pair<int,int> ii;
  35.  
  36. map<string, int> rev;
  37.  
  38. const char * morse[33]={
  39. ".-","-...","-.-.","-..",".",
  40. "..-.","--.","....","..",".---",
  41. "-.-",".-..","--","-.","---",
  42. ".--.","--.-",".-.","...","-",
  43. "..-","...-",".--","-..-","-.--","--..",
  44. "..--",".-.-","---.","----",
  45.  
  46.  
  47. };
  48.  
  49. int lengths[33];
  50.  
  51. char input[4444];
  52. char decoded[4444];
  53. int lenstr[4444];
  54.  
  55. int code(char c){
  56. if(c>='A' && c<='Z')
  57. return c-'A';
  58. if(c=='_')
  59. return 26;
  60. if(c==',')
  61. return 27;
  62. if(c=='.')
  63. return 28;
  64. if(c=='?')
  65. return 29;
  66. }
  67. char uncode(int c){
  68. if(c>=0 && c<=25)
  69. return c+'A';
  70. if(c==26)
  71. return '_';
  72. if(c==27)
  73. return ',';
  74. if(c==28)
  75. return '.';
  76. if(c==29)
  77. return '?';
  78. }
  79.  
  80.  
  81. void solve() {
  82. int L = strlen(input);
  83. int current = 0;
  84. for(int i=0;i<L;++i){
  85. int dec = code(input[i]);
  86. strcpy(decoded+current, morse[dec]);
  87. current+=lengths[dec];
  88. lenstr[i] = lengths[dec];
  89. }
  90.  
  91. current = 0;
  92. for(int i=0;i<L;++i){
  93. int l = lenstr[L-i-1];
  94. char tt[10];
  95. for(int j=0;j<l;++j)
  96. tt[j] = decoded[current+j];
  97. tt[l]=0;
  98. current+=l;
  99. int ou = rev[tt];
  100. putchar(uncode(ou));
  101. }
  102. putchar('\n');
  103. }
  104.  
  105. int main() {
  106. for(int i=0;i<30;++i){
  107. lengths[i]=strlen(morse[i]);
  108. rev[morse[i]]=i;
  109. }
  110.  
  111. while (scanf(" %s", input) != EOF) {
  112. solve();
  113. }
  114. return 0;
  115. }
  116.