Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <vector>
- #include <set>
- #include <map>
- #include <cassert>
- #include <ctime>
- #include <string>
- using namespace std;
- #ifdef WIN32
- #define LLD "%I64d"
- #else
- #define LLD "%lld"
- #endif
- typedef pair<int, int> pii;
- typedef long long ll;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef vector<bool> vb;
- typedef vector<vb> vvb;
- typedef vector<ll> vll;
- typedef vector<vll> vvll;
- #define TASKNAME "text"
- #define pb push_back
- #define mp make_pair
- #define INF ((int)1E9)
- #define EPS (1E-9)
- #define eprintf(...) fprintf(stderr, __VA_ARGS__)
- #define sz(x) ((int)(x).size())
- const int maxn = (int)2e5 + 100;
- char s[maxn];
- char res[2 * maxn];
- const int maxc = 75;
- char alf[maxc + 1] = "@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789?!.,:; \'\"-()";
- char wholealf[256];
- #ifndef DEBUG
- #define assert(x) while (!(x)) cerr << "assert!\n";
- #endif
- const int maxrest = 8;
- int rest[maxrest] = {0, 10, 13, 26, 39, (unsigned int)'\\', (unsigned int)'\"', (unsigned int)'?'};
- int main() {
- #ifdef DEBUG
- {
- ll tmp;
- asm("rdtsc" : "=A"(tmp));
- srand(tmp);
- }
- freopen("text.in", "r", stdin);
- freopen("main_test.cpp", "w", stdout);
- #endif
- int cntwh = 0;
- for (int i = 0; i < 256; i++) {
- bool fail = 0;
- for (int j = 0; j < maxrest; j++)
- if (i == rest[j])
- fail = 1;
- if (fail)
- continue;
- wholealf[cntwh++] = (char)i;
- }
- wholealf[cntwh] = 0;
- printf("//CPP\n");
- printf("#include <iostream>\n");
- // printf("#include <io.h>\n#include <fcntl.h>\n_setmode(_fileno(stdin),_O_BINARY);\n_setmode(_fileno(stdout),_O_BINARY);");
- int n = 0;
- while (gets(s)) {
- for (int i = 0; s[i]; i++)
- res[n++] = s[i];
- res[n++] = alf[0];
- }
- const int group = 5;
- printf("const int maxc = 75;\nchar alf[maxc + 1] = \"\\nABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789?!.,:; \\'\\\"-()\";\n");
- printf("int wholealf[256];\n");
- printf("int group = 5;\n");
- printf("int n = %d;\n", n);
- printf("char tmp[200000] = \"");
- // for (int i = 40; i <= 50; i++)
- // eprintf("%c\n", (char)i);
- for (int i = 0; i < n; i += group) {
- int tmp[group];
- memset(tmp, 0, sizeof(tmp));
- for (int it = 0; it < group && i + it < n; it++) {
- bool found = 0;
- for (int j = 0; j < maxc; j++)
- if (res[it + i] == alf[j])
- tmp[group - 1 - it] = j, found = 1;
- if (!found) {
- // eprintf("%c\n", res[it + i]);
- assert(0);
- throw 3;
- }
- }
- long long sum = 0;
- for (int i = 0; i < group; i++)
- sum = sum * maxc + tmp[i];
- // eprintf("sum1 = %d\n", sum);
- assert(sum >= 0);
- char res[group - 1];
- for (int j = 0; j < group - 1; j++)
- res[group - 2 - j] = wholealf[sum % cntwh], sum /= cntwh;
- assert(!sum);
- for (int j = 0; j < group - 1; j++)
- printf("%c", res[j]);//, eprintf("%d\n", (int)res[j]);
- }
- printf("\";\n");
- printf("const int maxrest = %d;\n", maxrest);
- printf("int rest[maxrest] = {");
- for (int i = 0; i < maxrest; i++) {
- printf("%d", rest[i]);
- if (i < maxrest - 1)
- printf(", ");
- }
- printf("};\n");
- printf("int main() {\n");
- printf("#ifdef DEBUG\n");
- printf("freopen(\"text.ans\", \"w\", stdout);\n");
- printf("#endif\n");
- printf("int cntwh = 0;\nfor (int i = 0; i < 256; i++) {\n");
- printf("bool fail = 0;\n");
- printf("for (int j = 0; j < maxrest; j++)\n");
- printf("if (i == rest[j])\n");
- printf("fail = 1;\n");
- printf("if (fail)\n");
- printf("continue;\n");
- printf("wholealf[i] = cntwh++;\n}\n");
- printf("for (int it = 0, i = 0; it < n; it += group, i += group - 1) {\n");
- printf("long long sum = 0;\n");
- printf("for (int j = 0; j < group - 1; j++) {\n");
- printf("sum = sum * cntwh + wholealf[(int)(unsigned char)tmp[i + j]];\n");
- printf("}\n");
- // printf("eprintf(\"sum = %%d\\n\", sum);\n");
- printf("for (int j = 0; j < group && it + j < n; j++) {\n");
- printf("printf(\"%%c\", alf[sum %% maxc]), sum /= maxc;\n");
- printf("}\n");
- printf("}\n");
- printf("}\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement