zoukankan      html  css  js  c++  java
  • (DFS)noip2004——虫食算

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 char a[4][28];
     5 bool vix[100],vi[28];
     6 int c[100],ge=1,an[100],t;
     7 bool judge1()
     8 {
     9     char x,y,z;
    10     for(int i=t;i>0;i--)
    11     {
    12         x=a[1][i];y=a[2][i];z=a[3][i];
    13         if(an[x]!=-1&&an[y]!=-1&&an[z]!=-1&&(an[x]+an[y])%t!=an[z]&&(an[x]+an[y]+1)%t!=an[z])
    14             return false;
    15     }
    16     return true;
    17 }
    18 bool judge2()
    19 {
    20     char x,y,z;
    21     int jin=0;
    22     for(int i=t;i>0;i--)
    23     {
    24         x=a[1][i];y=a[2][i];z=a[3][i];
    25         jin=jin+an[x]+an[y];
    26         if(jin%t!=an[z])
    27             return false;
    28         jin/=t;
    29     }
    30     return true;
    31 }
    32 void dfs(int x)
    33 {
    34     int z=c[x];
    35     if(!judge1())
    36         return;
    37     if(x>t)
    38     {
    39         if(judge2())
    40         {
    41             for(int i=0;i<t;i++)
    42             {
    43                 if(i)
    44                     printf(" ");
    45                 printf("%d",an['A'+i]);
    46 
    47             }
    48             exit(0);
    49         }
    50         else
    51             return;
    52     }
    53 
    54     else
    55     {
    56         for(int i=t-1;i>=0;i--)
    57             if(!vi[i])
    58             {
    59                 vi[i]=true;
    60                 an[z]=i;
    61                 dfs(x+1);
    62                 an[z]=-1;
    63                 vi[i]=false;
    64             }
    65     }
    66 }
    67 int main()
    68 {
    69     scanf("%d",&t);
    70     int i,j;
    71     memset(an,-1,sizeof(an));
    72     for(i=1;i<=3;i++)
    73         scanf("%s",a[i]+1);
    74     for(i=t;i>0;i--)
    75         for(j=1;j<4;j++)
    76             if(!vix[a[j][i]])
    77             {
    78                 vix[a[j][i]]=true;
    79                 c[ge++]=a[j][i];
    80             }
    81     dfs(1);
    82     return 0;
    83 }

    剪枝重要性的完美体现。

    从各位开始扫,找到唯一的正确答案就exit(0)

  • 相关阅读:
    前端基础之CSS
    前端基础之HTML
    Http状态码解释
    Python操作MySQL
    MySQL忘记root密码的解决办法
    关闭MySQL数据库的几种方法
    prompt更改MySQL登陆后的提示符
    JQ例子:旋转木马
    JQ属性和css部分测试
    JQ选择器逐一测试
  • 原文地址:https://www.cnblogs.com/quintessence/p/6533448.html
Copyright © 2011-2022 走看看