Advertisement
AquaBlitz11

Cryptopangrams (Test set 1)

Apr 7th, 2019
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.     // build sieve
  7.     bool used[10010] = {};
  8.     vector<int> primes;
  9.     for (int i = 2; i <= 10000; ++i) {
  10.         if (used[i]) continue;
  11.         primes.push_back(i);
  12.         for (int j = i+i; j <= 10000; j += i)
  13.             used[j] = true;
  14.     }
  15.  
  16.     int T;
  17.     scanf("%d", &T);
  18.     for (int t = 1; t <= T; ++t) {
  19.         // input
  20.         int n, l;
  21.         scanf("%d%d", &n, &l);
  22.         assert(n <= 10000);
  23.         int val[l], P[l+1];
  24.         for (int i = 0; i < l; ++i)
  25.             scanf("%d", &val[i]);
  26.         // find suitable starting point
  27.         int st;
  28.         for (int i = 0; i < l; ++i) {
  29.             int sol = 0;
  30.             for (auto p : primes) {
  31.                 if (val[i]%p == 0 && val[i+1]%p == 0)
  32.                     sol = sol == 0 ? p : -1;
  33.             }
  34.             if (sol > 0) {
  35.                 st = i;
  36.                 P[i] = val[i]/sol;
  37.                 break;
  38.             }
  39.         }
  40.         // go left and right
  41.         for (int i = st+1; i < l+1; ++i)
  42.             P[i] = val[i-1]/P[i-1];
  43.         for (int i = st-1; i >= 0; --i)
  44.             P[i] = val[i]/P[i+1];
  45.         // create map to characters
  46.         map<int, char> M;
  47.         for (int i = 0; i < l+1; ++i)
  48.             M[P[i]] = 0;
  49.         char cnt = 'A';
  50.         for (auto &m : M) // &m = allows editing directly in the map
  51.             m.second = cnt++;
  52.         printf("Case #%d: ", t);
  53.         for (int i = 0; i < l+1; ++i)
  54.             printf("%c", M[P[i]]);
  55.         printf("\n");
  56.     }
  57.    
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement