Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.29 KB | None | 0 0
  1. #define FILE_INPUT
  2. #define _CRT_SECURE_NO_WARNINGS
  3.  
  4. #include <bits/stdc++.h>
  5.  
  6. using namespace std;
  7.  
  8. typedef long long ll;
  9. typedef unsigned long long ull;
  10. typedef double dbl;
  11. typedef long double ldbl;
  12. typedef pair<int, int> pii;
  13. typedef pair<ll, ll> pll;
  14. typedef string str;
  15. typedef vector<int> vi;
  16. typedef vector<ll> vll;
  17.  
  18. #define majorro cout.precision(20); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  19. #define pb push_back
  20. #define forn(i, n) for(ll (i) = 0; (i) < (n); ++(i))
  21. #define fornm(i, m, n) for(ll (i) = (m); (i) < (n); ++(i))
  22. #define rfornm(i, m, n) for(ll (i) = (m); (i) >= (n); --(i))
  23. #define fin() for(ll i = 0; i < n; ++i)
  24. #define readvec(vector, n) {ll temp_vec_val;forn(i, n){cin >> temp_vec_val;vector.push_back(temp_vec_val);}}
  25. #define printvec(vector, delimeter) {ll length_of_vector=vector.size();\
  26.                                     forn(elementvec, length_of_vector){cout << vector[elementvec] << delimeter;}}
  27. #define printarr(arr, length, delimeter) {forn(elementarr, length){cout << arr[elementarr] << delimeter;}}
  28. #define sortvec(vector) sort(vector.begin(), vector.end())
  29.  
  30.  
  31. struct custom_hash
  32. {
  33.     static uint64_t splitmix64(uint64_t x)
  34.     {
  35.         x += 0x9e3779b97f4a7c15;
  36.         x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
  37.         x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
  38.         return x ^ (x >> 31);
  39.     }
  40.  
  41.     size_t operator()(uint64_t x) const {
  42.         static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
  43.         return splitmix64(x + FIXED_RANDOM);
  44.     }
  45. };
  46.  
  47. unsigned long long bpow(unsigned long long a, ll n, ll mod)
  48. {
  49.     return n ? n & 1 ? (bpow(a, n - 1, mod) * a) % mod : (bpow((a * a) % mod, n >> 1ll, mod)) % mod : 1ll;
  50. }
  51.  
  52. int get_digit(ll num, int len, int index)
  53. {
  54.     return num / bpow(10, len - index - 1, 1) % 10;
  55. }
  56.  
  57. ll digit_sum(ll num)
  58. {
  59.     ll dig_sum = 0;
  60.     while(num > 0)
  61.     {
  62.         dig_sum += num % 10;
  63.         num /= 10;
  64.     }
  65.     return dig_sum;
  66. }
  67.  
  68. const ldbl EPS = 0.000001;
  69. const ll MOD = 1000000007;
  70. // const ll MOD = 3037000499;
  71. // const ull MOD = 1000000000000000003;
  72. const ll INF = 1e18;
  73. const double pi = 2 * acos(0.0);
  74. ll n, m, k, p, q, t, sum = 0, cnt = 0;
  75. ll mx = INT64_MIN;
  76. ll mn = INT64_MAX;
  77. bool flag = 0;
  78. vll v;
  79. str s = "", s1, s2;
  80.  
  81. void bad_solve(){}
  82.  
  83. void solve() //set.merge() -> c++17
  84. //DELET DEBUG OUTPUT!11!1
  85. //DONT FORGET MODULO SUBSTRACTION
  86. {
  87.     cin >> n >> m >> t;
  88.     readvec(v, n);
  89.     unordered_map<ll, vll> mp;
  90.     fin()
  91.     {
  92.         if(v[i] == t)
  93.         {
  94.             cout << v[i];
  95.             return;
  96.         }
  97.     }
  98.     forn(i, n-1)
  99.     {
  100.         fornm(j, i+1, n)
  101.         {
  102.             ll prod = (v[i]*v[j]+m)%m;
  103.             mp[prod] = {i, j};
  104.             ll rev = bpow(prod, m-2, m);
  105.             ll nrev = (rev*t + m) % m;
  106.             if(mp.find(nrev) != mp.end())
  107.             {
  108.                 forn(o, mp[prod].size())
  109.                 {
  110.                     forn(oo, mp[nrev].size())
  111.                     {
  112.                         if(mp[prod][o] == mp[nrev][oo])
  113.                         {
  114.                             flag = 1;
  115.                             break;
  116.                         }
  117.                     }
  118.                     if(flag) break;
  119.                 }
  120.                 if(!flag)
  121.                 {
  122.                     forn(_, mp[prod].size()) cout << v[mp[prod][_]] << ' ';
  123.                     forn(_, mp[nrev].size()) cout << v[mp[nrev][_]] << ' ';
  124.                     return;
  125.                 }
  126.             }
  127.             flag = 0;
  128.         }
  129.     }
  130.     forn(i, n-2)
  131.     {
  132.         fornm(j, i+1, n-1)
  133.         {
  134.             fornm(k, j+1, n)
  135.             {
  136.                 ll prod = (((v[i]*v[j]+m)%m)*v[k]+m)%m;
  137.                 mp[prod] = {i, j, k};
  138.                 ll rev = bpow(prod, m-2, m);
  139.                 ll nrev = (rev*t + m) % m;
  140.                 if(mp.find(nrev) != mp.end())
  141.                 {
  142.                     forn(o, mp[prod].size())
  143.                     {
  144.                         forn(oo, mp[nrev].size())
  145.                         {
  146.                             if(mp[prod][o] == mp[nrev][oo])
  147.                             {
  148.                                 flag = 1;
  149.                                 break;
  150.                             }
  151.                         }
  152.                         if(flag) break;
  153.                     }
  154.                     if(!flag)
  155.                     {
  156.                         forn(_, mp[prod].size()) cout << v[mp[prod][_]] << ' ';
  157.                         forn(_, mp[nrev].size()) cout << v[mp[nrev][_]] << ' ';
  158.                         return;
  159.                     }
  160.                 }
  161.                 flag = 0;
  162.             }
  163.         }
  164.     }
  165.     forn(i, n-3)
  166.     {
  167.         fornm(j, i+1, n-2)
  168.         {
  169.             fornm(k, j+1, n-1)
  170.             {
  171.                 fornm(p, k+1, n)
  172.                 {
  173.                     ll prod = ((v[i]*v[j]+m)%m*(v[k]*v[p]+m)%m+m)%m;
  174.                     mp[prod] = {i, j, k, p};
  175.                     ll rev = bpow(prod, m-2, m);
  176.                     ll nrev = (rev*t + m) % m;
  177.                     if(mp.find(nrev) != mp.end())
  178.                     {
  179.                         forn(o, mp[prod].size())
  180.                         {
  181.                             forn(oo, mp[nrev].size())
  182.                             {
  183.                                 if(mp[prod][o] == mp[nrev][oo])
  184.                                 {
  185.                                     flag = 1;
  186.                                     break;
  187.                                 }
  188.                             }
  189.                             if(flag) break;
  190.                         }
  191.                         if(!flag)
  192.                         {
  193.                             forn(_, mp[prod].size()) cout << v[mp[prod][_]] << ' ';
  194.                             forn(_, mp[nrev].size()) cout << v[mp[nrev][_]] << ' ';
  195.                             return;
  196.                         }
  197.                     }
  198.                     flag = 0;
  199.                 }
  200.             }
  201.         }
  202.     }
  203.     exit(1);
  204. }
  205.  
  206. int main()
  207. {
  208. #ifdef FILE_INPUT
  209.     freopen("in.txt", "r", stdin);
  210.     freopen("out.txt", "w", stdout);
  211. #endif
  212.     majorro
  213.  
  214.     solve();
  215.  
  216.     // freopen("test.txt", "w", stdout);
  217.     // bad_solve();
  218.  
  219. //  memset(v, INT_MAX, 1000*2000*sizeof(int));
  220.  
  221.     return 0;
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement