Pagini recente » Cod sursa (job #805682) | Cod sursa (job #571813) | Cod sursa (job #3305028) | Cod sursa (job #2460520) | Cod sursa (job #3343075)
#include <fstream>
using namespace std;
ifstream fin ("bubblesort.in");
ofstream fout ("bubblesort.out");
const int DIM = 500;
struct nr_mari
{
long long v[DIM + 1];
nr_mari ()
{
for (int i = 0; i <= DIM; i++)
v[i] = 0;
}
void constr (int x)
{
v[0] = 1;
v[1] = x;
}
friend nr_mari operator + (nr_mari &a, nr_mari &b)
{
nr_mari c;
int i = 0;
long long t=0;
for (i = 1; i <= a.v[0] || i <= b.v[0]; i++)
{
c.v[i] = a.v[i] + b.v[i] + t;
t = c.v[i] / 10;
c.v[i] = c.v[i] % 10;
}
c.v[0] = i - 1;
if (t > 0)
{
c.v[0] = i;
c.v[i] = t;
}
return c;
}
friend bool operator < (nr_mari &a, nr_mari &b)
{
if (a.v[0] < b.v[0])
return 1;
if (a.v[0] > b.v[0])
return 0;
for (int i = a.v[0]; i > 0; i--)
{
if (a.v[i] < b.v[i])
return 1;
if (a.v[i] > b.v[i])
return 0;
}
return 0;
}
friend nr_mari operator - (nr_mari &a, nr_mari &b)
{
nr_mari c;
long long t = 0;
int i = 0;
for (i = 1; i <= a.v[0]; i++)
{
if (a.v[i] - t < b.v[i])
{
c.v[i] = 10 + a.v[i] - b.v[i] - t;
t = 1;
}
else
{
c.v[i] = a.v[i] - b.v[i] - t;
t = 0;
}
}
c.v[0] = a.v[0];
while (c.v[0] > 1 && c.v[c.v[0]] == 0)
c.v[0]--;
return c;
}
friend nr_mari operator / (nr_mari &a, int x)
{
nr_mari c;
c.v[0] = a.v[0];
int i = 0;
long long r = 0;
for (i = a.v[0]; i > 0; i--)
{
r = r * 10 + a.v[i];
c.v[i] = r / x;
r = r % x;
}
while (c.v[0] > 1 && c.v[c.v[0]] == 0)
c.v[0]--;
if (r != 0)
{
i = 1;
while (c.v[i] == 9)
{
c.v[i] = 0;
i++;
}
c.v[i]++;
if (i > c.v[0])
c.v[0]++;
}
return c;
}
friend nr_mari operator * (nr_mari &a, int y)
{
int i = 0;
long long t = 0;
for (i = 1; i <= a.v[0]; i++)
{
long long k = 1ll * a.v[i] * y + t;
a.v[i] = k % 10;
t = k / 10;
}
while (t != 0)
{
a.v[0]++;
a.v[a.v[0]] = t % 10;
t = t / 10;
}
return a;
}
void afis ()
{
int i;
fout << v[v[0]];
for (i = v[0]; i > 0; i--)
{
fout<<v[i];
}
}
};
void calc (nr_mari &pm, int n, int m)
{
if (m == 0)
pm.init (0);
else
{
pm.init (1);
for (int i = 1; i <= n - m + 1; i++)
pm *= m;
for (int i = 1; i <= m; i++)
pm *= i;
}
}
void init ()
{
fin >> n >> m >> k;
calc (pm, n, m);
calc (pm_1, n, m - 1);
}
void solve ()
{
fin >> n >> m >> k;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (!in_p[j])
{
valm = calc_val (j);
valm_1 = calc_val (j);
val = valm - valm_1;
if (k > val)
k -= val;
else
{
sol[i] = j;
in_p[j] = 1;
break;
}
}
}
}
}
void print ()
{
for (int i = 1; i <= n; i++)
fout << sol[i];
}
int main ()
{
init ();
solve ();
print ();
return 0;
}