Advertisement
Guest User

Untitled

a guest
Oct 13th, 2012
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.07 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <iostream>
  6. #include <cstring>
  7. #include <vector>
  8. #include <set>
  9. #include <map>
  10. #include <cassert>
  11. #include <ctime>
  12. #include <string>
  13.  
  14. using namespace std;
  15.  
  16. #ifdef WIN32
  17.     #define LLD "%I64d"
  18. #else
  19.     #define LLD "%lld"
  20. #endif
  21.  
  22. typedef pair<int, int> pii;
  23. typedef long long ll;
  24. typedef vector<int> vi;
  25. typedef vector<vi> vvi;
  26. typedef vector<bool> vb;
  27. typedef vector<vb> vvb;
  28. typedef vector<ll> vll;
  29. typedef vector<vll> vvll;
  30.  
  31. #define TASKNAME "text"
  32. #define pb push_back
  33. #define mp make_pair
  34. #define INF ((int)1E9)
  35. #define EPS (1E-9)
  36. #define eprintf(...) fprintf(stderr, __VA_ARGS__)
  37. #define sz(x) ((int)(x).size())
  38.  
  39. const int maxn = (int)2e5 + 100;
  40. char s[maxn];
  41. char res[2 * maxn];
  42.  
  43. const int maxc = 75;
  44. char alf[maxc + 1] = "@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789?!.,:; \'\"-()";
  45. char wholealf[256];
  46.  
  47. #ifndef DEBUG
  48. #define assert(x) while (!(x)) cerr << "assert!\n";
  49. #endif
  50.  
  51. const int maxrest = 8;
  52. int rest[maxrest] = {0, 10, 13, 26, 39, (unsigned int)'\\', (unsigned int)'\"', (unsigned int)'?'};
  53.  
  54. int main() {
  55.     #ifdef DEBUG
  56.         {
  57.             ll tmp;
  58.             asm("rdtsc" : "=A"(tmp));
  59.             srand(tmp);
  60.         }
  61.         freopen("text.in", "r", stdin);
  62.         freopen("main_test.cpp", "w", stdout);
  63.     #endif
  64.     int cntwh = 0;
  65.     for (int i = 0; i < 256; i++) {
  66.         bool fail = 0;
  67.         for (int j = 0; j < maxrest; j++)
  68.             if (i == rest[j])
  69.                 fail = 1;
  70.         if (fail)
  71.             continue;
  72.         wholealf[cntwh++] = (char)i;
  73.     }
  74.     wholealf[cntwh] = 0;
  75.    
  76.     printf("//CPP\n");
  77.     printf("#include <iostream>\n");
  78. //  printf("#include <io.h>\n#include <fcntl.h>\n_setmode(_fileno(stdin),_O_BINARY);\n_setmode(_fileno(stdout),_O_BINARY);");
  79.    
  80.     int n = 0;
  81.     while (gets(s)) {
  82.         for (int i = 0; s[i]; i++)
  83.             res[n++] = s[i];
  84.         res[n++] = alf[0];
  85.     }
  86.    
  87.     const int group = 5;
  88.     printf("const int maxc = 75;\nchar alf[maxc + 1] = \"\\nABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789?!.,:; \\'\\\"-()\";\n");
  89.     printf("int wholealf[256];\n");
  90.     printf("int group = 5;\n");
  91.     printf("int n = %d;\n", n);
  92.     printf("char tmp[200000] = \"");
  93. //  for (int i = 40; i <= 50; i++)
  94. //      eprintf("%c\n", (char)i);
  95.     for (int i = 0; i < n; i += group) {
  96.         int tmp[group];
  97.         memset(tmp, 0, sizeof(tmp));
  98.         for (int it = 0; it < group && i + it < n; it++) {
  99.             bool found = 0;
  100.             for (int j = 0; j < maxc; j++)
  101.                 if (res[it + i] == alf[j])
  102.                     tmp[group - 1 - it] = j, found = 1;
  103.             if (!found) {
  104. //              eprintf("%c\n", res[it + i]);
  105.                 assert(0);
  106.                 throw 3;
  107.             }
  108.         }
  109.         long long sum = 0;
  110.         for (int i = 0; i < group; i++)
  111.             sum = sum * maxc + tmp[i];
  112. //      eprintf("sum1 = %d\n", sum);
  113.         assert(sum >= 0);
  114.         char res[group - 1];
  115.         for (int j = 0; j < group - 1; j++)
  116.             res[group - 2 - j] = wholealf[sum % cntwh], sum /= cntwh;
  117.         assert(!sum);
  118.         for (int j = 0; j < group - 1; j++)
  119.             printf("%c", res[j]);//, eprintf("%d\n", (int)res[j]);
  120.     }
  121.     printf("\";\n");
  122.    
  123.     printf("const int maxrest = %d;\n", maxrest);
  124.     printf("int rest[maxrest] = {");
  125.     for (int i = 0; i < maxrest; i++) {
  126.         printf("%d", rest[i]);
  127.         if (i < maxrest - 1)
  128.             printf(", ");
  129.     }
  130.     printf("};\n");
  131.    
  132.     printf("int main() {\n");
  133.     printf("#ifdef DEBUG\n");
  134.     printf("freopen(\"text.ans\", \"w\", stdout);\n");
  135.     printf("#endif\n");
  136.     printf("int cntwh = 0;\nfor (int i = 0; i < 256; i++) {\n");
  137.     printf("bool fail = 0;\n");
  138.     printf("for (int j = 0; j < maxrest; j++)\n");
  139.     printf("if (i == rest[j])\n");
  140.     printf("fail = 1;\n");
  141.     printf("if (fail)\n");
  142.     printf("continue;\n");
  143.        
  144.     printf("wholealf[i] = cntwh++;\n}\n");
  145.    
  146.     printf("for (int it = 0, i = 0; it < n; it += group, i += group - 1) {\n");
  147.     printf("long long sum = 0;\n");
  148.     printf("for (int j = 0; j < group - 1; j++) {\n");
  149.     printf("sum = sum * cntwh + wholealf[(int)(unsigned char)tmp[i + j]];\n");
  150.     printf("}\n");
  151. //  printf("eprintf(\"sum = %%d\\n\", sum);\n");
  152.     printf("for (int j = 0; j < group && it + j < n; j++) {\n");
  153.     printf("printf(\"%%c\", alf[sum %% maxc]), sum /= maxc;\n");
  154.     printf("}\n");
  155.     printf("}\n");
  156.     printf("}\n");
  157.     return 0;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement