找钱包
?
暴力枚舉所有可能 ,也就只有2的25次方;
關鍵在于如何去除可旋轉得到的重復方案,這里我直接模擬方案的旋轉,
然后查找旋轉所可以得到的四個方案是否在set里,如果一個都沒有說明是新的方案
即可放入set
?
#include<bits/stdc++.h> using namespace std;set<string>q;int mp[6][6]={{0,0,0,0,0,0},{0,1,2,3,4,10},{0,4000,5,6,50,20},{0,3000,6000,7000,60,30},{0,2000,5000,600,500,40},{0,1000,400,300,200,100},}; void dfs(int x,int y,vector<int>a){if(a.size()==5){int sum=0;int t=a[0];char tmp[30];string str="";int flag=0;for(int j=0;j<4;j++){sort(a.begin(),a.end());str="";for(int i=0;i<5;i++){ sprintf(tmp,"%d",a[i]);str+=tmp;if(a[i]!=7000){a[i]=a[i]*10;if(a[i]>=10000){a[i]/=10000;}}}if(q.find(str)!=q.end()){flag=1;break;}}if(flag==0)q.insert(str);return;}if(y==5){y=1;if(x<5){x++;}else{return;}}else{y++;}dfs(x,y,a);a.push_back(mp[x][y]);dfs(x,y,a);} int main(){vector<int>a;dfs(1,0,a);cout<<q.size(); }?
總結
- 上一篇: 了解AMD处理器的OPN编号
- 下一篇: centos7启动服务uthorizat