Advertisement
Hezov

UAIC 2024 SIII P3

Jul 2nd, 2025
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. // using namespace std;   error: reference to 'pair' is ambiguous
  4. const int MAXW = 50257;
  5. const int MAXN = 1000000;
  6. typedef struct pair {
  7.     int w1;// 0 <= w1 < MAXW
  8.     int w2;// 0 <= w2 < MAXW
  9.     bool operator == (pair b)
  10.     {
  11.         return w1 == b.w1 && w2 == b.w2;
  12.     }
  13.     bool operator < (pair b)
  14.     {
  15.         if(w1 != b.w1) return w1 < b.w1;
  16.         return w2 < b.w2;
  17.     }
  18. }pair;
  19.  
  20. int mostLikely(int *V, int N, pair P)
  21. {
  22.     int sol = 0, maxiAp = 0;
  23.     int frecv[MAXW] = {0};
  24.     for(int i = 2;i<N;i++)
  25.         if(V[i-2] == P.w1 && V[i-1] == P.w2)
  26.         {
  27.             frecv[V[i]]++;
  28.             if(frecv[V[i]] > maxiAp)
  29.                 sol = V[i], maxiAp = frecv[V[i]];
  30.         }
  31.     return sol;
  32. }
  33. int pairs(int *V, int N, pair *Pairs)
  34. {
  35.     for(int i = 0;i < N - 1;i++)
  36.         Pairs[i] = {V[i], V[i+1]};
  37.  
  38.     std::sort(Pairs, Pairs + N - 1);
  39.  
  40.     int L = 0;
  41.  
  42.     for(int i = 1;i < N - 1;i++)
  43.     {
  44.         if(! (Pairs[i] == Pairs[i-1]) )
  45.             Pairs[++L] = Pairs[i];
  46.     }
  47.     return L + 1;
  48. }
  49. int pairIndex(pair *Pairs, int L, pair P)
  50. {
  51.     int st = 0, dr = L - 1, mid;
  52.     while(st <= dr)
  53.     {
  54.         mid = (st + dr) / 2;
  55.         if(Pairs[mid] == P)
  56.             return mid;
  57.         if(Pairs[mid] < P)
  58.             st = mid + 1;
  59.         else dr = mid - 1;
  60.     }
  61.     return -1;
  62. }
  63. void learn(int *V, int N, pair *Pairs, int L, int *Next)
  64. {
  65.     for(int i = 0;i < L;i++)
  66.         Next[i] = mostLikely(V,N,Pairs[i]);
  67. }
  68. void generate(int *V, int N, int K, int *R, int X, int Y)
  69. {
  70.     // Declaram si calculam Pairs si Next
  71.     pair Pairs[N - 1];
  72.     int L = pairs(V,N,Pairs);
  73.     int Next[L];
  74.     learn(V,N,Pairs,L,Next);
  75.  
  76.     // Generam textul.
  77.     R[0] = X, R[1] = Y;
  78.     for(int i = 2;i < K;i++)
  79.     {
  80.         pair c = {R[i-2], R[i-1]};
  81.         int poz = pairIndex(Pairs,L,c);
  82.         if(poz != -1)
  83.             R[i] = Next[poz];
  84.         else R[i] = 0;
  85.     }
  86. }
  87. int main()
  88. {
  89.     return 0;
  90. }
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement