题目点这里
题解:
简单题,注意最大值和最小值是相邻的。
代码实现:
/*
ID: eashion
LANG: C++
TASK: combo
*/
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#define MAX 110
using namespace std;
int N;
int res;
int lis[3];
int lis1[3];
int lis2[3];
//void print();
bool test();
void dfs(int len);
int main()
{
freopen("combo.in","r",stdin);
freopen("combo.out","w",stdout);
while( scanf("%d",&N) != EOF ){
res = 0;
memset(lis,0,sizeof(lis));
memset(lis1,0,sizeof(lis1));
memset(lis2,0,sizeof(lis2));
for( int i = 0; i < 3; i++ ){
scanf("%d",&lis1[i]);
}
for( int i = 0; i < 3; i++ ){
scanf("%d",&lis2[i]);
}
dfs(0);
printf("%d\n",res);
}
return 0;
}
void dfs(int len){
if( len == 3 ){
if( test() ){
//print();
res++;
}
return ;
}
for( int i = 1; i <= N; i++ ){
lis[len] = i;
dfs(len+1);
}
return ;
}
bool test(){
bool flag = false;
for( int i = 0; i < 3; i++ ){
int tmp = abs(lis1[i]-lis[i]);
if( tmp <= 2 || tmp == N-1 || tmp == N-2 ){
if( i == 2 ){
flag = true;
}
continue;
}
else{
break;
}
}
for( int i = 0; i < 3; i++ ){
int tmp = abs(lis2[i]-lis[i]);
if( tmp <= 2 || tmp == N-1 || tmp == N-2 ){
if( i == 2 ){
flag = true;
}
continue;
}
else{
break;
}
}
if( flag ){
return true;
}
else{
return false;
}
}
//
//void print(){
// for( int i = 0; i < 3; i++ ){
// printf("%d ",lis[i]);
// }
// printf("\n");
//}