Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define FILE_INPUT
- #define _CRT_SECURE_NO_WARNINGS
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef double dbl;
- typedef long double ldbl;
- typedef pair<int, int> pii;
- typedef pair<ll, ll> pll;
- typedef string str;
- typedef vector<int> vi;
- typedef vector<ll> vll;
- #define majorro cout.precision(20); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #define pb push_back
- #define forn(i, n) for(ll (i) = 0; (i) < (n); ++(i))
- #define fornm(i, m, n) for(ll (i) = (m); (i) < (n); ++(i))
- #define rfornm(i, m, n) for(ll (i) = (m); (i) >= (n); --(i))
- #define fin() for(ll i = 0; i < n; ++i)
- #define readvec(vector, n) {ll temp_vec_val;forn(i, n){cin >> temp_vec_val;vector.push_back(temp_vec_val);}}
- #define printvec(vector, delimeter) {ll length_of_vector=vector.size();\
- forn(elementvec, length_of_vector){cout << vector[elementvec] << delimeter;}}
- #define printarr(arr, length, delimeter) {forn(elementarr, length){cout << arr[elementarr] << delimeter;}}
- #define sortvec(vector) sort(vector.begin(), vector.end())
- struct custom_hash
- {
- static uint64_t splitmix64(uint64_t x)
- {
- x += 0x9e3779b97f4a7c15;
- x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
- x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
- return x ^ (x >> 31);
- }
- size_t operator()(uint64_t x) const {
- static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
- return splitmix64(x + FIXED_RANDOM);
- }
- };
- unsigned long long bpow(unsigned long long a, ll n, ll mod)
- {
- return n ? n & 1 ? (bpow(a, n - 1, mod) * a) % mod : (bpow((a * a) % mod, n >> 1ll, mod)) % mod : 1ll;
- }
- int get_digit(ll num, int len, int index)
- {
- return num / bpow(10, len - index - 1, 1) % 10;
- }
- ll digit_sum(ll num)
- {
- ll dig_sum = 0;
- while(num > 0)
- {
- dig_sum += num % 10;
- num /= 10;
- }
- return dig_sum;
- }
- const ldbl EPS = 0.000001;
- const ll MOD = 1000000007;
- // const ll MOD = 3037000499;
- // const ull MOD = 1000000000000000003;
- const ll INF = 1e18;
- const double pi = 2 * acos(0.0);
- ll n, m, k, p, q, t, sum = 0, cnt = 0;
- ll mx = INT64_MIN;
- ll mn = INT64_MAX;
- bool flag = 0;
- vll v;
- str s = "", s1, s2;
- void bad_solve(){}
- void solve() //set.merge() -> c++17
- //DELET DEBUG OUTPUT!11!1
- //DONT FORGET MODULO SUBSTRACTION
- {
- cin >> n >> m >> t;
- readvec(v, n);
- unordered_map<ll, vll> mp;
- fin()
- {
- if(v[i] == t)
- {
- cout << v[i];
- return;
- }
- }
- forn(i, n-1)
- {
- fornm(j, i+1, n)
- {
- ll prod = (v[i]*v[j]+m)%m;
- mp[prod] = {i, j};
- ll rev = bpow(prod, m-2, m);
- ll nrev = (rev*t + m) % m;
- if(mp.find(nrev) != mp.end())
- {
- forn(o, mp[prod].size())
- {
- forn(oo, mp[nrev].size())
- {
- if(mp[prod][o] == mp[nrev][oo])
- {
- flag = 1;
- break;
- }
- }
- if(flag) break;
- }
- if(!flag)
- {
- forn(_, mp[prod].size()) cout << v[mp[prod][_]] << ' ';
- forn(_, mp[nrev].size()) cout << v[mp[nrev][_]] << ' ';
- return;
- }
- }
- flag = 0;
- }
- }
- forn(i, n-2)
- {
- fornm(j, i+1, n-1)
- {
- fornm(k, j+1, n)
- {
- ll prod = (((v[i]*v[j]+m)%m)*v[k]+m)%m;
- mp[prod] = {i, j, k};
- ll rev = bpow(prod, m-2, m);
- ll nrev = (rev*t + m) % m;
- if(mp.find(nrev) != mp.end())
- {
- forn(o, mp[prod].size())
- {
- forn(oo, mp[nrev].size())
- {
- if(mp[prod][o] == mp[nrev][oo])
- {
- flag = 1;
- break;
- }
- }
- if(flag) break;
- }
- if(!flag)
- {
- forn(_, mp[prod].size()) cout << v[mp[prod][_]] << ' ';
- forn(_, mp[nrev].size()) cout << v[mp[nrev][_]] << ' ';
- return;
- }
- }
- flag = 0;
- }
- }
- }
- forn(i, n-3)
- {
- fornm(j, i+1, n-2)
- {
- fornm(k, j+1, n-1)
- {
- fornm(p, k+1, n)
- {
- ll prod = ((v[i]*v[j]+m)%m*(v[k]*v[p]+m)%m+m)%m;
- mp[prod] = {i, j, k, p};
- ll rev = bpow(prod, m-2, m);
- ll nrev = (rev*t + m) % m;
- if(mp.find(nrev) != mp.end())
- {
- forn(o, mp[prod].size())
- {
- forn(oo, mp[nrev].size())
- {
- if(mp[prod][o] == mp[nrev][oo])
- {
- flag = 1;
- break;
- }
- }
- if(flag) break;
- }
- if(!flag)
- {
- forn(_, mp[prod].size()) cout << v[mp[prod][_]] << ' ';
- forn(_, mp[nrev].size()) cout << v[mp[nrev][_]] << ' ';
- return;
- }
- }
- flag = 0;
- }
- }
- }
- }
- exit(1);
- }
- int main()
- {
- #ifdef FILE_INPUT
- freopen("in.txt", "r", stdin);
- freopen("out.txt", "w", stdout);
- #endif
- majorro
- solve();
- // freopen("test.txt", "w", stdout);
- // bad_solve();
- // memset(v, INT_MAX, 1000*2000*sizeof(int));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement