• scau 1138 代码等式


    代码借鉴大佬:https://www.cnblogs.com/DOLFAMINGO/p/7538771.html
     
     1 #include<cstdio>//scau 1138 代码等式
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<cmath>
     5 
     6 int fa[10010],length[30],beg[30];//fa是用来放爸爸的,length是用来放每一个字母的长度,beg是用来放字母代表的一串数字的第一个数的值
     7 
     8 int find(int x)
     9 {
    10     return (x==fa[x]?x:find(fa[x]));
    11 }
    12 
    13 void Union(int m, int n)
    14 {
    15     m = find(m);
    16     n = find(n);
    17     if(m!=n)
    18         fa[m] = n;
    19 }
    20 
    21 int main()
    22 {
    23     int n, s1[10010],s2[10010],len1 = 0,len2 = 0;//n伟字母的个数,然后是s1和s2分别是左边和右边的转化完之后的串存放的数组,len1和len2分别是左边式子和右边式子转化后数字的个数
    24     scanf("%d",&n);
    25     scanf("%d",&length[0]);
    26     beg[0] = 2;
    27     for(int i = 1; i<n; i++)
    28     {
    29         scanf("%d",&length[i]);
    30         beg[i] = beg[i-1] + length[i-1];
    31     }
    32 
    33     char ch;
    34     getchar();
    35     while((ch= getchar())!='=')
    36     {
    37         if(ch=='0' || ch=='1')
    38             s1[len1++] = ch-'0';
    39 
    40         else
    41         {
    42             for(int i = 0; i<length[ch-'a']; i++)
    43                 s1[len1++] = beg[ch-'a'] + i;
    44         }
    45     }
    46 
    47     while((ch= getchar())!='
    ')
    48     {
    49         if(ch=='0' || ch=='1')
    50             s2[len2++] = ch-'0';
    51 
    52         else
    53         {
    54             for(int i = 0; i<length[ch-'a']; i++)
    55                 s2[len2++] = beg[ch-'a'] + i;
    56         }
    57     }
    58 
    59     if(len1!=len2)
    60     {
    61         printf("0
    ");
    62         return 0;
    63     }
    64     
    65     for(int i = 0; i<beg[n-1]+length[n-1]; i++) //初始化每个单位变量的集合为自己
    66         fa[i] = i;
    67 
    68     for(int i = 0; i<len1; i++)//并查集
    69     {
    70         if(s1[i]+s2[i]==1)
    71         {
    72             printf("0
    ");
    73             return 0;
    74         }
    75 
    76         Union(s1[i],s2[i]);
    77     }
    78 
    79     int ans = 0;
    80     for(int i = 0; i<beg[n-1]+length[n-1]; i++)//遍历每个单位变量,统计集合个数
    81         if(fa[i]==i) ans++;
    82 
    83     printf("%.0lf
    ",pow(2,ans-2));
    84     return 0;
    85 }
    View Code
  • 相关阅读:
    keras后端设置【转载】
    NN中的激活函数【转载】
    关于范数【转载】
    常用范数公式【转载】
    Tf中的SGDOptimizer学习【转载】
    亲和串 kmp
    kmp基础 ekmp
    Number Sequence kmp
    P1052 过河 线性dp
    P1074 靶形数独 dfs回溯法
  • 原文地址:https://www.cnblogs.com/SCAU-gogocj/p/11973702.html
Copyright © 2020-2023  润新知