zoukankan      html  css  js  c++  java
  • Combination Lock

    链接

    分析:在无限改之后终于过了,里面要处理的细节比较多,最后可以抽象成字符串,用set来去重

      1 /*
      2     PROB:combo
      3     ID:wanghan
      4     LANG:C++
      5 */
      6 #include "iostream"
      7 #include "cstdio"
      8 #include "cstring"
      9 #include "string"
     10 #include "vector"
     11 #include "set"
     12 using namespace std;
     13 int n,num;
     14 vector<int> Next;
     15 set<string> h;
     16 vector<int> p[4];
     17 vector<int> q[4];
     18 int a1,a2,a3,b1,b2,b3;
     19 void init()
     20 {
     21     for(int i=1;i<=n;i++)
     22         Next.push_back(i);
     23     for(int i=1;i<=n;i++)
     24         Next.push_back(i);
     25     if(Next.size()<=5){
     26         for(int i=1;i<=5;i++)
     27             Next.push_back(1);
     28     }
     29 }
     30 string Rev(int num){   //转化成字符串
     31     string res="";
     32     while(num){
     33         int mod=num%10;
     34         res+=(mod+'0');
     35         num/=10;
     36     }
     37     int i=0,j=res.length()-1;
     38     while(i<j){
     39         swap(res[i],res[j]);
     40         i++,j--;
     41     }
     42     return res;
     43 }
     44 void solve1(int ans,int flag){
     45     int pos;
     46     for(int i=0;i<Next.size();i++){
     47         if(ans==Next[i]){
     48             pos=i; break;
     49         }
     50     }
     51     if(pos<2) pos+=max(n,2);
     52     p[flag].push_back(Next[pos-2]);
     53     p[flag].push_back(Next[pos-1]);
     54     p[flag].push_back(Next[pos]);
     55     p[flag].push_back(Next[pos+1]);
     56     p[flag].push_back(Next[pos+2]);
     57     /*cout<<flag<<":"<<endl;
     58     for(int i=0;i<p[flag].size();i++)
     59         cout<<p[flag][i]<<endl;
     60     cout<<endl;*/
     61 }
     62 void solve2(int ans,int flag){
     63     int pos;
     64     for(int i=0;i<Next.size();i++){
     65         if(ans==Next[i]){
     66             pos=i; break;
     67         }
     68     }
     69     if(pos<2) pos+=max(2,n);
     70     q[flag].push_back(Next[pos-2]);
     71     q[flag].push_back(Next[pos-1]);
     72     q[flag].push_back(Next[pos]);
     73     q[flag].push_back(Next[pos+1]);
     74     q[flag].push_back(Next[pos+2]);
     75     /*cout<<flag<<":"<<endl;
     76     for(int i=0;i<q[flag].size();i++)
     77         cout<<q[flag][i]<<endl;
     78     cout<<endl;*/
     79 }
     80 int main()
     81 {
     82     freopen("combo.in","r",stdin);
     83     freopen("combo.out","w",stdout);
     84     cin>>n;
     85     init();
     86     cin>>a1>>a2>>a3>>b1>>b2>>b3;
     87     solve1(a1,0);
     88     solve1(a2,1);
     89     solve1(a3,2);
     90     solve2(b1,0);
     91     solve2(b2,1);
     92     solve2(b3,2);
     93     for(int i=0;i<p[0].size();i++){
     94         for(int j=0;j<p[1].size();j++){
     95             for(int k=0;k<p[2].size();k++){
     96                 string tt="";
     97                 tt+=Rev(p[0][i]);
     98                 tt+=Rev(p[1][j]);
     99                 tt+=Rev(p[2][k]);
    100                 h.insert(tt);
    101             }
    102         }
    103     }
    104     for(int i=0;i<q[0].size();i++){
    105         for(int j=0;j<q[1].size();j++){
    106             for(int k=0;k<q[2].size();k++){
    107                 string yy="";
    108                 yy+=Rev(q[0][i]);
    109                 yy+=Rev(q[1][j]);
    110                 yy+=Rev(q[2][k]);
    111                 h.insert(yy);
    112             }
    113         }
    114     }
    115     set<string>::iterator it;
    116     /*for(it=h.begin();it!=h.end();it++)
    117         cout<<*it<<endl;*/
    118     cout<<h.size()<<endl;
    119     return 0;
    120 }
    View Code
  • 相关阅读:
    176. Second Highest Salary
    175. Combine Two Tables
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
    169. Majority Element
    168. Excel Sheet Column Title
    167. Two Sum II
    160. Intersection of Two Linked Lists
    个人博客记录
    <meta>标签
  • 原文地址:https://www.cnblogs.com/wolf940509/p/7041235.html
Copyright © 2011-2022 走看看