AcWing 1351. 密码锁
考察:暴力枚举
完全是因为有容斥原理才做了这题,结果这题和容斥原理有啥关系...
思路:
dfs枚举所有可能性
1 #include <iostream> 2 #include <algorithm> 3 #include <set> 4 #include <vector> 5 using namespace std; 6 typedef long long ll; 7 vector<int> v[10],t; 8 set<vector<int> > s; 9 void dfs(int k,int sz) 10 { 11 if(sz==3) 12 { 13 s.insert(t); 14 return; 15 } 16 for(int i=0;i<v[k].size();i++) 17 { 18 t.push_back(v[k][i]); 19 dfs(k+1,sz+1); 20 t.pop_back(); 21 } 22 } 23 int main() 24 { 25 int n; 26 scanf("%d",&n); 27 for(int i=1;i<=6;i++) 28 { 29 int x; scanf("%d",&x); 30 for(int d=-2;d<=2;d++) 31 { 32 if(x+d>0&&x+d<=n) v[i].push_back(x+d); 33 else if(x+d>n&&x+d-n>0&&x+d-n<=n) v[i].push_back(x+d-n); 34 else if(x+d<=0&&x+d+n<=n&&x+d+n>0) v[i].push_back(x+d+n); 35 } 36 } 37 dfs(1,0); 38 dfs(4,0); 39 ll ans = s.size(); 40 printf("%lld\n",ans); 41 return 0; 42 }