这道题其实我不是特别理解,是看了别人的思路写的……
当$n>5$时,总共的排列方式有$250$种,但是会有重复。把约翰相近的密码数量加上制造商接近的密码数量,减去它们之间冗余的所有可能,就是答案了。
当$n<5$的时候,答案就是$n^3$。
#include <bits/stdc++.h>
using namespace std;
int n;
set<int> a, b, c;
int main() {
scanf("%d", &n);
if (n <= 5) {printf("%d\n", n * n * n); return 0;}
for (int abc = 1; abc < 3; abc++) {
int x, y, z; cin>>x>>y>>z;
//接下来放入每一种可能性,set去重
for (int i = -2; i <= 2; i++) {
a.insert((x + n + i) % n);
b.insert((y + n + i) % n);
c.insert((z + n + i) % n);
}
}
//冗余部分
printf("%d\n", 250 - (10 - a.size()) * (10 - b.size()) * (10 - c.size()));
return 0;
}