Pagini recente » Cod sursa (job #217339) | Cod sursa (job #686533) | Cod sursa (job #2205618) | Cod sursa (job #2042915) | Cod sursa (job #1345892)
#include <vector>
#include <fstream>
#include <map>
using namespace std;
ifstream fin ("curcubeu.in");
ofstream fout ("curcubeu.out");
const int N = 1e6 + 5;
int n, a, b, c, k, f[N], crt;
vector <pair <int, int> > vin[N], vout[N];
vector <pair <int, int> > stiva;
void update(int &a, int &b, int &c) {
int A = min(a, b), B = max(a, b);
vin[A].push_back(make_pair (c, k));
vout[B].push_back(make_pair (c, k++));
}
int main() {
fin >> n >> a >> b >> c;
update(a, b, c);
for (int i = 2; i < n; ++i) {
a = (1LL * a * i) % n;
b = (1LL * b * i) % n;
c = (1LL * c * i) % n;
update(a, b, c);
}
for (int i = 1; i < n; ++i) {
for (vector <pair <int, int> > :: iterator it = vin[i].begin(); it != vin[i].end(); ++it) {
f[it->second] = it->first;
if (it->second > crt)
crt = it->second;
}
while (crt && !f[crt])
crt--;
fout << f[crt] << "\n";
for (vector <pair <int, int> > :: iterator it = vout[i].begin(); it != vout[i].end(); ++it)
f[it->second] = 0;
}
}