题解
很简单的一道题,不知道为什么分在贪心里,没见用到什么贪心方法。
只要遍历n^3个密码依次检测就可以了,注意这是环形密码首尾也相邻。
代码
/*
PROG:combo
ID:imking022
LANG:C++
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
int n;
int pwd[3],cot1[3], cot2[3];
bool tol(int a, int b){
if( abs(a - b) <=2) return true;
else if( (n - abs(a - b))%n <= 2) return true; // front - end detect
return false;
}
bool check(int i, int j, int k){
bool c1,c2;
c1 = c2 = true;
pwd[0] = i;
pwd[1] = j;
pwd[2] = k;
for( int i=0;i<3;i++){
if( ! tol(pwd[i],cot1[i])){
c1 =false;
break;
}
}
for( int i=0;i<3;i++){
if( ! tol( pwd[i],cot2[i])){
c2 =false;
break;
}
}
if( c1||c2) return true;
return false;
}
int main(void){
cin>>n;
int ret = 0;
for(int i=0;i<3;i++){
cin>>cot1[i] ;
}
for(int i=0;i<3;i++){
cin>>cot2[i] ;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
if(check(i,j,k)) ret++;
}
cout<<ret<<endl;
return 0;
}