Pagini recente » Cod sursa (job #273666) | Cod sursa (job #769760) | Cod sursa (job #3321455) | Cod sursa (job #3345552) | Cod sursa (job #3353401)
#include <bits/stdc++.h>
#define cin ci
#define cout co
using namespace std;
ifstream cin("permutare.in");
ofstream cout("permutare.out");
const int Nmax = 1001;
const int Max= 1e9;
int c, n, p;
int dp[Nmax][Nmax];
void solve1()
{
int lin = n, col = n, fh = 1, sh = n + 1, pos = p;
vector<int> ans;
ans.resize(2 * n + 2);
for(int i=1; i<=2*n; i++)
{
if(col == 0)
{
ans[sh++] = i;
lin--;
}
else
if(pos <= dp[lin][col - 1])
{
ans[fh++] = i;
col--;
}
else
{
ans[sh++] = i;
pos -= dp[lin][col - 1];
lin--;
}
}
for(int i=1; i<=2 * n; i++)
cout << ans[i] << " ";
cout << '\n';
}
int main()
{
dp[0][0] = 1;
for(int i=1; i<Nmax; i++)
dp[i][0] = 1;
for(int i=1; i<Nmax; i++)
for(int j=1; j<=i; j++)
dp[i][j] = min(dp[i-1][j] + dp[i][j-1], Max);
while(cin >> c)
{
if(c == 1)
{
cin >> n >> p;
/*for(int i=1; i<=n; i++, cout << '\n')
for(int j=1; j<=i; j++)
cout << dp[i][j] << " ";*/
solve1();
}
else
{
cin >> n;
int lin = n, col = n;
vector<int> v;
v.resize(2 * n + 2, 0);
for(int i=1; i<=2*n; i++)
cin >> v[i];
int fh = 1, sh = n + 1, pos = 1;
for(int i=1; i<=2 * n; i++)
{
if(v[fh] == i)
{
col--;
fh++;
}
else
if(v[sh] == i)
{
pos += dp[lin][col - 1];
lin--;
sh++;
}
}
cout << pos << '\n';
}
}
return 0;
}