zoukankan      html  css  js  c++  java
  • 神奇的乘法 (Anagram and Multiplication,UVa 10825)

     1 #include <iostream>
     2 #include <string.h>
     3 #include <string>
     4 #include <fstream>
     5 #include <algorithm>
     6 #include <stdio.h>
     7 #include <vector>
     8 #include <queue>
     9 #include <set>
    10 using namespace std;
    11 const double eps = 1e-8;
    12 #define MAXN 10000001
    13 int n,m;
    14 int ans[7],test[7];
    15 int stats=0;
    16 int finish=0;
    17 bool check(int *a,int *b)
    18 {
    19     int hash[404];
    20     memset(hash,0,sizeof(hash));
    21     for(int i=1;i<=m;i++)
    22     hash[a[i]]++;
    23     for(int i=1;i<=m;i++)
    24     if(hash[b[i]]==0)return false;
    25     return true;
    26 }
    27 int* multiply(int t,int *a)
    28 {
    29     int *b=new int[m+1],temp=0;
    30     for(int i=m;i>=1;i--)
    31     {
    32         temp+=a[i]*t;
    33         b[i]=temp%n;
    34         temp=temp/n;
    35     }
    36     return b;
    37 }
    38 
    39 void print(int *tt)
    40 {
    41     printf("%d",tt[1]);
    42     for(int i=2;i<=m;i++)
    43     printf(" %d",tt[i]);
    44     printf("
    ");
    45 }
    46 
    47 void dfs(int c)
    48 {
    49     if(c==m){bool found=true;
    50         for(int i=2;i<=m;i++)
    51             if(!check(ans,multiply(i,test))){found=false;break;}
    52         if(found){print(test);finish=1;}
    53     return;}
    54     for(int i=1;i<m;i++)
    55     {
    56         if(stats&(1<<i))continue;
    57         test[c]=ans[i];
    58         stats|=(1<<i);
    59         dfs(c+1);
    60         stats^=(1<<i);
    61     }
    62 }
    63 int main()
    64 {
    65     int i,j;
    66 
    67     while(scanf("%d%d",&m,&n),m!=0&&n!=0)
    68     {
    69         finish=0;
    70         for(int last=1;last<=n-1;last++)
    71         {
    72            memset(ans,0,sizeof(ans));
    73            ans[1]=last;
    74         for(i=2;i<=m;i++)
    75         {
    76             int  temp=(last*i)%n;
    77             for(j=1;j<i;j++)
    78             if(temp==ans[j])break;
    79             if(j==i)ans[j]=temp;
    80             else break;
    81         }
    82             if(ans[m]!=0)
    83             {
    84                 swap(ans[1],ans[m]);
    85                 test[m]=ans[m];
    86                 //print(ans);
    87                 //print(multiply(2,ans));
    88                 stats=0;
    89                 dfs(1);
    90             }
    91         if(finish)break;}
    92         if(!finish)printf("Not found.
    ");
    93     }
    94 
    95     return 0;
    96 }

    终于没参考别人的代码 --!

  • 相关阅读:
    python面向对象中的一些特殊__方法__
    mysql数据库的优化和查询效率的优化
    详解python的垃圾回收机制
    基于django的自定义简单session功能
    使用python制作验证码
    Netty 系列之 Netty 高性能之道
    Java提高篇(二七)-----TreeMap
    Oracle、MySql、SQLServer 数据分页查询
    深入理解数据库原理系列(1)---日志系统原理
    34个数据库常见面试题讲解
  • 原文地址:https://www.cnblogs.com/TO-Asia/p/3193803.html
Copyright © 2011-2022 走看看