Source code for submission s546

fs.cpp

  1. #include <algorithm>
  2. #include <cmath>
  3. #include<cstdio>
  4. #include <cstring>
  5. #include <iomanip>
  6. #include <iostream>
  7. #include <list>
  8. #include <map>
  9. #include <queue>
  10. #include <set>
  11. #include <stack>
  12. #include <string>
  13. #include <vector>
  14.  
  15. using namespace std;
  16.  
  17. #define REP(i,n) for ( int i = 0; i < (n); i++)
  18. #define FOR(i,a,b) for ( int i = (a); i <= (b); i++ )
  19. #define FORD(i,a,b) for ( int i = (a); i>= (b); i-- )
  20. #define DEBUG(x) cerr << ">>> " << #x << " : " << x << endl;
  21.  
  22. const string morseTable [30]= {".-","-...","-.-.","-..",".","..-.","--.","....",
  23. "..",".---","-.-",".-..","--","-.","---",".--.",
  24. "--.-",".-.","...","-","..-","...-",".--","-..-","-.--",
  25. "--..","..--",".-.-","---.","----"};
  26.  
  27. char find (string s) {
  28. int res = -1;
  29. for (int i = 0; i < 30; i++){
  30. if (s == morseTable[i]) {
  31. res = i;
  32. break;
  33. }
  34. }
  35. if (res < 26 ) return (char)(res+'A');
  36. else if (res == 26) return '_';
  37. else if (res == 27) return ',';
  38. else if (res == 28) return '.';
  39. else return '?';
  40. }
  41.  
  42. int main() {
  43. string s,morse,result,tmpres;
  44. int lengths [1010],prev;
  45. while (cin >> s) {
  46. //cout << s << endl;
  47. tmpres = result = morse = "";
  48. for (int i = 0; i < (int)s.length(); i++) {
  49. if (s[i]>='A' && s[i]<='Z') morse += morseTable [s[i]-'A'];
  50. else if (s[i]=='_') morse += morseTable [26];
  51. else if (s[i]==',') morse += morseTable [27];
  52. else if (s[i]=='.') morse += morseTable [28];
  53. else if (s[i]=='?') morse += morseTable [29];
  54. if (s[i]>='A' && s[i]<='Z') lengths[i]=morseTable[s[i]-'A'].length();
  55. else lengths[i]=4;
  56.  
  57. }
  58. //cout << morse << endl;
  59. //for (int i = 0; i < (int)s.length(); i++) {
  60. // cout << lengths [i];
  61. //}
  62. //cout << endl;
  63. prev = 0;
  64. for (int i = 0; i < (int)s.length(); i++) {
  65. tmpres += morse.substr (prev,lengths[(int)s.length()-i-1]);
  66. result += find(morse.substr (prev,lengths[(int)s.length()-i-1]));
  67. tmpres += '|';
  68. prev += lengths[(int)s.length()-i-1];
  69. }
  70. cout << result << endl;
  71. //cout << tmpres << endl;
  72.  
  73. }
  74.  
  75. return 0;
  76. }
  77.  
  78.