http://oj.ecustacm.cn/problem.php?id=1264
全排列
#include<cstdio>
#include<algorithm>
using namespace std;
int a[]={1,2,3,4,5,6,7,8,9,10};
int main(void)
{
int n=0;
do
{
bool flag=true;
for(int i=1;i<=4;i++)
{
if(a[i]<a[i-1])
{
flag=false;
break;
}
}
if(flag)
for(int i=6;i<=9;i++)
{
if(a[i]<a[i-1])
{
flag=false;
break;
}
}
if(flag)
for(int i=0;i<=4;i++)
{
if(a[i]>a[i+4+1])
{
flag=false;
break;
}
}
if(flag) n++;
}while(next_permutation(a,a+10));
printf("%d\n",n);
return 0;
}
精简版
#include <iostream>
#include <algorithm>
using namespace std;
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int cnt;
int main(){
do{
for (int i = 0; i < 5; i ++ ){
if ((a[i] > a[i + 1] && i + 1 < 5) || (a[i + 5] > a[i + 6] && i + 6 < 10) || a[i] > a[i + 5]){
cnt ++;
break;
}
}
}
while (next_permutation(a, a + 10));
cout << 3628800 - cnt << endl;
return 0;
}
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[15]={1,2,3,4,5,6,7,8,9,10};
int ans;
int main(void)
{
do
{
bool flag=false;
for(int i=0;i<=3;i++) if(a[i]>a[i+1]) flag=true;
for(int i=5;i<=8;i++) if(a[i]>a[i+1]) flag=true;
for(int i=0;i<5;i++) if(a[i]>a[i+5]) flag=true;
if(flag) continue;
ans++;
}while(next_permutation(a,a+10));
cout<<ans<<endl;
return 0;
}