luogu P2693 号码锁 模拟
1 //难点在于锁有容错性,左右相邻均可。并且这里题目规定了从1开始,所以不倾向与从0开始。这里写一个函数来单独用来判断相邻的问题,做题时,如果某个部分感到实现困难可以将其拆成不同部分,逐一击破。 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 int n,res; 6 int pwd[3][4]; 7 bool cls(int x,int y) 8 { 9 if (max(x,y) - min(x,y) <= 2) 10 return true; 11 if (min(x,y) + n - max(x,y) <= 2) 12 return true; 13 return false; 14 } 15 bool ok(int i,int j,int k) 16 { 17 for (int o = 1;o <= 2;o++) 18 if (cls(i,pwd[o][1]) && cls(j,pwd[o][2]) && cls(k,pwd[o][3])) 19 return true; 20 return false; 21 } 22 int main() 23 { 24 scanf("%d",&n); 25 for (int o = 1;o <= 2;o++) 26 for (int i = 1;i <= 3;i++) 27 scanf("%d",&pwd[o][i]); 28 for (int i = 1;i <= n;i++) 29 for (int j = 1;j <= n;j++) 30 for (int k = 1;k <= n;k++) 31 if (ok(i,j,k)) 32 res++; 33 printf("%d\n",res); 34 return 0; 35 }
心之所动 且就随缘去吧