torus711 のアレ

主に競技プログラミングの問題について書きます

Codeforces #175, A : Slightly Decreasing Permutations

概要

列 p を、1 〜 n までの整数の順列とする。
p の "減少係数" を p_i > p_{i + 1} なる i の数とする。
n と k が与えられるので、現象係数が k となる p を一つ示せ。

解法

増加列を作って先頭の k + 1 項を reverse すると作れます。

コード

typedef vector<int> VI;

#define FOR( v, c ) for ( auto &v : c )

int main()
{
	cin.tie( 0 );
	ios::sync_with_stdio( false );

	int n, k;
	cin >> n >> k;

	VI nums( n );
	REP( i, 0, n )
	{
		nums[i] = i + 1;
	}
	reverse( nums.begin(), nums.begin() + k + 1 );

	REP( i, 0, n )
	{
		if ( i )
		{
			cout << ' ';
		}
		cout << nums[i];
	}
	cout << endl;

	return 0;
}