题解 | I 体操队形
数字游戏
https://ac.nowcoder.com/acm/contest/11217/A
因为数据范围只有( 1 < n < 10 ), 利用STL容器next_permutation 得到全排列 ,然后循环判断该排列是否符合题意。
int f[15] ;
int a[15] ;
void solve()
{
int n ;
cin >> n ;
int x ;
bool flag = 0 ;
loop( i , 1 , n ) f[i] = i ;
loop( i , 1 , n ){
cin >> x ;
f[i] = x ;
}
int res = 0 ;
loop( i , 1 , n ) a[i] = i ;
do{
int cnt = 0 ;
loop( i , 1 , n ){
int pos_1 ;
int pos_2 ;
loop( j , 1 , n ){
if( a[j] == i ){
pos_1 = j ;
break ;
}
}
loop( j , 1 , n ){
if( a[j] == f[i] ){
pos_2 = j ;
break ;
}
}
if( pos_1 <= pos_2 ){
cnt++ ;
}
}
if( cnt == n ) res++ ;
}while( next_permutation(a+1,a+n+1) );
cout << res << endl ;
return ;
}