Source code for submission s577

false.cpp

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <iomanip>
  6. #include <iostream>
  7. #include <limits.h>
  8. #include <map>
  9. #include <queue>
  10. #include <vector>
  11. #include <set>
  12. #include <stack>
  13. #include <bitset>
  14. #include <string>
  15.  
  16. using namespace std;
  17.  
  18. typedef pair<int,int> ii;
  19. typedef vector<int> vi;
  20. typedef vector<ii> vii;
  21. typedef set<int> si;
  22. typedef set<ii> sii;
  23.  
  24. #define MP make_pair
  25. #define PB push_back
  26. #define REP(i,a) for ( int i = 0; i < int(a); i++)
  27. #define FOR(i,a,b) for ( int i = int(a); i<=int(b); i++)
  28. #define FORD(i,a,b) for(int i= int(a); i>=int(b); i--)
  29.  
  30. const int INF = 1<<29;
  31. typedef long long int ll;
  32. char crypted[20000];
  33. int tail;
  34. int head;
  35. char nmb[1024];
  36. char line[1024];
  37. char morse[30][6] = {".-",
  38. "-...",
  39. "-.-.",
  40. "-..",
  41. ".",
  42. "..-.",
  43. "--.",
  44. "....",
  45. "..",
  46. ".---",
  47. "-.-",
  48. ".-..",
  49. "--",
  50. "-.",
  51. "---",
  52. ".--.",
  53. "--.-",
  54. ".-.",
  55. "...",
  56. "-",
  57. "..-",
  58. "...-",
  59. ".--",
  60. "-..-",
  61. "-.--",
  62. "--..",
  63. "..--", /* _ */
  64. ".-.-", /* , */
  65. "---.", /* . */
  66. "----", }; /* ? */
  67.  
  68.  
  69. void add(char* c){
  70. while ( *c ) {
  71. crypted[tail++] = *c++;
  72. }
  73. }
  74.  
  75. void code() {
  76. int len = strlen(line);
  77. for ( int i = 0; i<len; i++) {
  78. switch( line[i] ) {
  79. default:
  80. add( morse[ line[i]-'A'] );
  81. nmb[i] = strlen( morse[line[i]-'A'] );
  82. break;
  83. case '_' :
  84. add(morse[26]) ;
  85. nmb[i] = 4;
  86. break;
  87. case ',':
  88. add(morse[27]);
  89. nmb[i] = 4;
  90. break;
  91. case '.':
  92. add(morse[28]);
  93. nmb[i] = 4;
  94. break;
  95. case '?':
  96. add(morse[29]);
  97. nmb[i] = 4;
  98. break;
  99. }
  100. }
  101. }
  102.  
  103. char getNext(int len) {
  104. int i = 0;
  105. for(;i<=29; i++){
  106. if (strlen(morse[i])==len && !strncmp(morse[i],crypted+head, len ) ) break;
  107. }
  108. head+=len;
  109. switch( i ){
  110. default:
  111. return i+'A';
  112. case 26:
  113. return '_';
  114. case 27:
  115. return ',';
  116. case 28:
  117. return '.';
  118. case 29:
  119. return '?';
  120. }
  121. }
  122. void decode(){
  123. int len = strlen(line);
  124. FOR(i,0,len-1){
  125. line[i] = getNext( nmb[len-i-1] );
  126. // printf("len:%d ~ %d : ",nmb[len-i-1], i);
  127. printf("%c", line[i]);
  128. }
  129. }
  130.  
  131. int main(){
  132. while( scanf(" %s", line) >0 ) {
  133. tail = head = 0;
  134. code();
  135. decode();
  136. printf("\n");
  137. //printf("%d\n", line);
  138. }
  139. return 0;
  140. }
  141.  
  142.