Advertisement
bildramer

Untitled

Sep 20th, 2011
395
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. inline int const factorial(int x) {
  2.     return x==1?1:x*factorial(x-1);
  3. }
  4.  
  5. inline int const pow(int a, int b){
  6.     return b==1?a:a*pow(a,b-1);
  7. }
  8.  
  9. const int num = 7;
  10.  
  11. int** ptable;
  12.  
  13. void initptable() {
  14.     ptable=(int**)malloc(sizeof(int*)*factorial(num));
  15.     for(int i=0;i<factorial(num);i++){
  16.         ptable[i]=(int*)malloc(sizeof(int)*num);
  17.         for(int j=0;j<num;j++)(ptable[i])[j]=-1;
  18.     }
  19.     (ptable[0])[0]=0;
  20.     for(int i=1;i<num;i++){
  21.         for(int j=1;j<i+1;j++){
  22.             for(int k=0;k<factorial(i);k++){
  23.                 for(int l=0;l<num;l++){
  24.                     (ptable[j*factorial(i)+k])[l]=(ptable[k])[l];
  25.                 }
  26.             }
  27.         }
  28.         for(int j=0;j<i+1;j++){
  29.             for(int k=0;k<factorial(i);k++){
  30.                 for(int l=i;l>j;l--){
  31.                     (ptable[j*factorial(i)+k])[l]=(ptable[j*factorial(i)+k])[l-1];
  32.                 }
  33.                 (ptable[j*factorial(i)+k])[j]=i;
  34.             }
  35.         }
  36.     }
  37.     for(int i=0;i<factorial(num);i++){
  38.         for(int j=0;j<num;j++){
  39.             (ptable[i])[j]=num-1-(ptable[i])[j];
  40.         }
  41.     }
  42. }
  43.  
  44. inline int perm(int* x) {
  45.     for(int i=0;i<factorial(num);i++){
  46.         char flag=1;
  47.         for(int j=0;j<num;j++){
  48.             if(x[j]!=(ptable[i])[j])flag=0;
  49.         }
  50.         if(flag)return i;
  51.     }
  52.     return -1;
  53. }
  54.  
  55. int main (int argc, char** argv) {
  56.     initptable();
  57.     char* nets=(char*)malloc(factorial(num));
  58.     for(int i=0;i<factorial(num);i++)nets[i]=0;
  59.     for(int i=0;i<factorial(num);i++){
  60.         if(nets[i])continue;
  61.         nets[i]|=1;
  62.         int* c=(int*)malloc(sizeof(int)*num);
  63.         for(int j=0;j<num;j++)c[j]=(ptable[i])[j];
  64.         for(int h=0;h<num;h++){
  65.             for(int j=0;j<num;j++){
  66.                 nets[perm(c)]|=2;
  67.                 for(int k=0;k<num;k++){
  68.                     c[k]=(c[k]+1)%num;
  69.                 }
  70.             }
  71.             for(int j=0;j<num/2;j++){
  72.                 int tmp=c[j];
  73.                 c[j]=c[num-1-j];
  74.                 c[num-1-j]=tmp;
  75.             }
  76.             for(int j=0;j<num;j++){
  77.                 nets[perm(c)]|=2;
  78.                 for(int k=0;k<num;k++){
  79.                     c[k]=(c[k]+1)%num;
  80.                 }
  81.             }
  82.             for(int j=0;j<num/2;j++){
  83.                 int tmp=c[j];
  84.                 c[j]=c[num-1-j];
  85.                 c[num-1-j]=tmp;
  86.             }
  87.             int tmp=c[0];
  88.             for(int j=0;j<num-1;j++){
  89.                 c[j]=c[j+1];
  90.             }
  91.             c[num-1]=tmp;
  92.         }
  93.     }
  94.     int s=0;
  95.     for(int i=0;i<factorial(num);i++){
  96.         if(nets[i]&1){
  97.             s++;
  98.             for(int j=0;j<num;j++){
  99.                 cout<<(char)((ptable[i])[j]+65);
  100.             }
  101.             cout<<endl;
  102.         }
  103.     }
  104.     cout<<s<<endl;
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement