Pagini recente » Cod sursa (job #1461241) | Cod sursa (job #496802) | Cod sursa (job #3260884) | Cod sursa (job #275988) | Cod sursa (job #3296709)
#include <fstream>
#include <vector>
using namespace std;
vector<int> a, b, c, t, rez;
int n;
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
int findd(int i)
{
if(t[i] == 0)
return i;
return t[i] = findd(t[i]);
}
int unionn(int x, int y)
{
if(x != y)
t[x] = y;
}
int main()
{
fin >> n;
a.resize(n+1), b.resize(n+1), c.resize(n+1), t.resize(n+1), rez.resize(n+1);
fin >> a[1] >> b[1] >> c[1];
if(a[1] > b[1])
swap(a[1], b[1]);
for(int i = 2; i < n; i++)
{
a[i] = 1LL*(a[i-1]*i)%n;
b[i] = 1LL*(b[i-1]*i)%n;
c[i] = 1LL*(c[i-1]*i)%n;
if(a[i] > b[i])
swap(a[i], b[i]);
}
for(int i = n-1; i >= 1; i--)
{
int x = findd(a[i]), y = findd(b[i]+1);
cout << x << " " << y << "\n";
while(x <= b[i])
{
rez[x] = c[i];
unionn(x, b[i]+1);
x = findd(x+1);
}
}
for(int i = 1; i <= n-1; i++)
fout << rez[i] << "\n";
return 0;
}