• 第十五周 12.6-12.12


    12.6

    状况百出的迎新杯。惶恐。

    12.7

    补个BC。

    HDU 5593 ZYB's Tree

    对树上每点求与其距离不超过k点数。k<=10.

    一开始想的是用一个a[]存孩子中不超过k数,用另一个b[]存父亲传递过来的不超过k数。

    但是这样转移不过来。因为父亲那边过来的不仅有父亲的父亲。还有父亲的其他孩子树。

    所以想到换成用b[]存 父亲+所有孩子 不超过k数就可以转移了。

    转移方程是 b[pos][i+1] = b[fa][i] - a[pos][i-1] + a[pos][i+1] 。

    每个点的答案就是b[]求和。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 const int maxn = 500000 + 10;
     6 typedef long long LL;
     7 int cnt, headlist[maxn];
     8 int a[maxn][11], b[maxn][11];
     9 int ans[maxn];
    10 LL N, K, A, B;
    11 
    12 struct node
    13 {
    14     int to,pre;
    15 } edge[maxn * 2];
    16 
    17 void add(int from,int to)
    18 {
    19     cnt++;
    20     edge[cnt].pre = headlist[from];
    21     edge[cnt].to = to;
    22     headlist[from] = cnt;
    23 }
    24 
    25 void dfs1(int pos, int fa)
    26 {
    27     a[pos][0] = 1;
    28     for(int i = headlist[pos]; i; i = edge[i].pre)
    29     {
    30         int to = edge[i].to;
    31         if(to == fa) continue;
    32         dfs1(to, pos);
    33         a[pos][1]++;
    34         for(int j = 1; j < K; j++) a[pos][j+1] += a[to][j];
    35     }
    36     return;
    37 }
    38 
    39 void dfs2(int pos, int fa)
    40 {
    41     if(fa != 0)
    42     {
    43         b[pos][1]++;
    44         for(int i = 1; i < K; i++) b[pos][i+1] += b[fa][i] - a[pos][i-1];
    45     }
    46     for(int i = 0; i <= K; i++) b[pos][i] += a[pos][i] ,ans[pos] += b[pos][i];
    47     for(int i = headlist[pos]; i; i = edge[i].pre)
    48     {
    49         int to = edge[i].to;
    50         if(to == fa) continue;
    51         dfs2(to, pos);
    52     }
    53     return;
    54 }
    55 
    56 int main(void)
    57 {
    58     int T;
    59     scanf("%d", &T);
    60     while(T--)
    61     {
    62         scanf("%I64d %I64d %I64d %I64d", &N, &K, &A, &B);
    63         cnt = 0;
    64         memset(headlist, 0, sizeof(headlist));
    65         memset(a, 0, sizeof(a));
    66         memset(b, 0, sizeof(b));
    67         memset(ans, 0, sizeof(ans));
    68         for(LL i = 2; i <= N; i++)
    69         {
    70             LL b = (A * i + B) % (i - 1) + 1;
    71             add(i, b);
    72             add(b, i);
    73         }
    74         dfs1(1,0);
    75         dfs2(1,0);
    76         int ret = 0;
    77         for(int i = 1; i <= N; i++) ret ^= ans[i];
    78         printf("%d
    ", ret);
    79     }
    80     return 0;
    81 }
    Aguin

    停滞很久的AC自动姬。

    HDU 2457 DNA repair

    没有注意到可以有20*50*1000的做法。

    偷看题解一开始还以为要在Trie图上dp。然而直接dp就可以了。

    由于曾在写法上被坑过。先是很乖的写了sb法。

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <queue>
      6 using namespace std;
      7 const int maxnode = 1010, sigma_size = 4;
      8 char str[] = "AGCT", s[1010];
      9 int N;
     10 
     11 struct Ac_auto
     12 {
     13     int Next[maxnode][sigma_size];
     14     int fail[maxnode];
     15     int val[maxnode];
     16     int sz;
     17 
     18     Ac_auto(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     19     void init(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     20 
     21     int idx(char c)
     22     {
     23         if(c == 'A') return 0;
     24         else if(c == 'G') return 1;
     25         else if(c == 'C') return 2;
     26         return 3;
     27     }
     28 
     29     void insert(char *s)
     30     {
     31         int u = 0, n = strlen(s);
     32         for(int i = 0; i < n; i++)
     33         {
     34             int c = idx(s[i]);
     35             if(!Next[u][c])
     36             {
     37                 memset(Next[sz], 0, sizeof(Next[sz]));
     38                 val[sz] = 0;
     39                 Next[u][c] = sz++;
     40             }
     41             u = Next[u][c];
     42         }
     43         val[u] = 1;
     44     }
     45 
     46     void build()
     47     {
     48         queue<int> q;
     49         fail[0] = 0;
     50         for(int i = 0; i < sigma_size; i++) if(Next[0][i])
     51         {
     52             fail[Next[0][i]] = 0;
     53             q.push(Next[0][i]);
     54         }
     55         while(!q.empty())
     56         {
     57             int pos = q.front(); q.pop();
     58             for(int i = 0; i < sigma_size; i++)
     59             {
     60                 if(!Next[pos][i]) Next[pos][i] = Next[fail[pos]][i];
     61                 else
     62                 {
     63                     fail[Next[pos][i]] = Next[fail[pos]][i];
     64                     q.push(Next[pos][i]);
     65                 }
     66             }
     67         }
     68     }
     69 
     70 }ACA;
     71 
     72 const int INF = 100000;
     73 int dp[1010][1010];
     74 int solve()
     75 {
     76     int len = strlen(s);
     77     for(int i = 0; i <= len; i++)
     78         for(int j = 0; j < ACA.sz; j++)
     79             dp[i][j] = INF;
     80     dp[0][0] = 0;
     81     for(int i = 0; i < len; i++)
     82     {
     83         for(int j = 0; j < ACA.sz; j++)
     84         {
     85             if(dp[i][j] == INF) continue;
     86             for(int k = 0; k < 4; k++)
     87             {
     88                 int pos = ACA.Next[j][k], ok = 1;
     89                 while(pos)
     90                 {
     91                     if(ACA.val[pos]) {ok = 0; break;}
     92                     pos = ACA.fail[pos];
     93                 }
     94                 if(!ok) continue;
     95                 int & t = dp[i+1][ACA.Next[j][k]];
     96                 t = min(t, dp[i][j] + (str[k] != s[i]) );
     97             }
     98         }
     99     }
    100     int ans = INF;
    101     for(int i = 0; i < ACA.sz; i++) ans = min(ans, dp[len][i]);
    102     return ans == INF ? -1 : ans;
    103 }
    104 
    105 int main(void)
    106 {
    107     int kase = 0;
    108     while(~scanf("%d", &N) && N)
    109     {
    110         ACA.init();
    111         for(int i = 1; i <= N; i++)
    112         {
    113             char tmp[22];
    114             scanf("%s", tmp);
    115             ACA.insert(tmp);
    116         }
    117         ACA.build();
    118         scanf("%s", s);
    119         printf("Case %d: %d
    ", ++kase, solve());
    120     }
    121     return 0;
    122 }
    Aguin

     不过这次改了一下写法还是过的。也如预期快了一点点。(并不

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <queue>
      6 using namespace std;
      7 const int maxnode = 1010, sigma_size = 4;
      8 char str[] = "AGCT", s[1010];
      9 int N;
     10 
     11 struct Ac_auto
     12 {
     13     int Next[maxnode][sigma_size];
     14     int fail[maxnode];
     15     int val[maxnode];
     16     int sz;
     17 
     18     Ac_auto(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     19     void init(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     20 
     21     int idx(char c)
     22     {
     23         if(c == 'A') return 0;
     24         else if(c == 'G') return 1;
     25         else if(c == 'C') return 2;
     26         return 3;
     27     }
     28 
     29     void insert(char *s)
     30     {
     31         int u = 0, n = strlen(s);
     32         for(int i = 0; i < n; i++)
     33         {
     34             int c = idx(s[i]);
     35             if(!Next[u][c])
     36             {
     37                 memset(Next[sz], 0, sizeof(Next[sz]));
     38                 val[sz] = 0;
     39                 Next[u][c] = sz++;
     40             }
     41             u = Next[u][c];
     42         }
     43         val[u] = 1;
     44     }
     45 
     46     void build()
     47     {
     48         queue<int> q;
     49         fail[0] = 0;
     50         for(int i = 0; i < sigma_size; i++) if(Next[0][i])
     51         {
     52             fail[Next[0][i]] = 0;
     53             q.push(Next[0][i]);
     54         }
     55         while(!q.empty())
     56         {
     57             int pos = q.front(); q.pop();
     58             for(int i = 0; i < sigma_size; i++)
     59             {
     60                 if(!Next[pos][i]) Next[pos][i] = Next[fail[pos]][i];
     61                 else
     62                 {
     63                     fail[Next[pos][i]] = Next[fail[pos]][i];
     64                     q.push(Next[pos][i]);
     65                 }
     66                 if(val[fail[Next[pos][i]]]) val[Next[pos][i]] = 1;
     67             }
     68         }
     69     }
     70 
     71 }ACA;
     72 
     73 const int INF = 100000;
     74 int dp[1010][1010];
     75 int solve()
     76 {
     77     int len = strlen(s);
     78     for(int i = 0; i <= len; i++)
     79         for(int j = 0; j < ACA.sz; j++)
     80             dp[i][j] = INF;
     81     dp[0][0] = 0;
     82     for(int i = 0; i < len; i++)
     83     {
     84         for(int j = 0; j < ACA.sz; j++)
     85         {
     86             if(dp[i][j] == INF) continue;
     87             for(int k = 0; k < 4; k++)
     88             {
     89                 if(ACA.val[ACA.Next[j][k]]) continue;
     90                 int & t = dp[i+1][ACA.Next[j][k]];
     91                 t = min(t, dp[i][j] + (str[k] != s[i]) );
     92             }
     93         }
     94     }
     95     int ans = INF;
     96     for(int i = 0; i < ACA.sz; i++) ans = min(ans, dp[len][i]);
     97     return ans == INF ? -1 : ans;
     98 }
     99 
    100 int main(void)
    101 {
    102     int kase = 0;
    103     while(~scanf("%d", &N) && N)
    104     {
    105         ACA.init();
    106         for(int i = 1; i <= N; i++)
    107         {
    108             char tmp[22];
    109             scanf("%s", tmp);
    110             ACA.insert(tmp);
    111         }
    112         ACA.build();
    113         scanf("%s", s);
    114         printf("Case %d: %d
    ", ++kase, solve());
    115     }
    116     return 0;
    117 }
    Aguin

    12.8

    HNU 11187 Emoticons :-)

    找到一个就回原点。gets读。

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <queue>
      6 using namespace std;
      7 const int maxnode = 2222, sigma_size = 256;
      8 int N, M;
      9 
     10 struct Ac_auto
     11 {
     12     int Next[maxnode][sigma_size];
     13     int fail[maxnode];
     14     int val[maxnode];
     15     int sz;
     16 
     17     Ac_auto(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     18     void init(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     19 
     20     int idx(char c){return c;}
     21 
     22     void insert(char *s)
     23     {
     24         int u = 0, n = strlen(s);
     25         for(int i = 0; i < n; i++)
     26         {
     27             int c = idx(s[i]);
     28             if(!Next[u][c])
     29             {
     30                 memset(Next[sz], 0, sizeof(Next[sz]));
     31                 val[sz] = 0;
     32                 Next[u][c] = sz++;
     33             }
     34             u = Next[u][c];
     35         }
     36         val[u] = 1;
     37     }
     38 
     39     void build()
     40     {
     41         queue<int> q;
     42         fail[0] = 0;
     43         for(int i = 0; i < sigma_size; i++) if(Next[0][i])
     44         {
     45             fail[Next[0][i]] = 0;
     46             q.push(Next[0][i]);
     47         }
     48         while(!q.empty())
     49         {
     50             int pos = q.front(); q.pop();
     51             for(int i = 0; i < sigma_size; i++)
     52             {
     53                 if(!Next[pos][i]) Next[pos][i] = Next[fail[pos]][i];
     54                 else
     55                 {
     56                     fail[Next[pos][i]] = Next[fail[pos]][i];
     57                     if(val[fail[Next[pos][i]]]) val[Next[pos][i]] = 1;
     58                     q.push(Next[pos][i]);
     59                 }
     60             }
     61         }
     62     }
     63 
     64     int cal(char * s)
     65     {
     66         int ret = 0;
     67         int len = strlen(s), pos = 0;
     68         for(int i = 0; i < len; i++)
     69         {
     70             pos = Next[pos][idx(s[i])];
     71             int tmp = pos, flag = 0;
     72             while(tmp)
     73             {
     74                 if(val[tmp]) {flag = 1; break;}
     75                 tmp = fail[tmp];
     76             }
     77             if(flag) {pos = 0; ret++;}
     78         }
     79         return ret;
     80     }
     81 
     82 }ACA;
     83 
     84 int main(void)
     85 {
     86     while(~scanf("%d %d", &N, &M) && N && M)
     87     {
     88         getchar();
     89         ACA.init();
     90         for(int i = 1; i <= N; i++)
     91         {
     92             char tmp[111];
     93             gets(tmp);
     94             ACA.insert(tmp);
     95         }
     96         ACA.build();
     97         int ans = 0;
     98         for(int i = 1; i <= M; i++)
     99         {
    100             char s[111];
    101             gets(s);
    102             ans += ACA.cal(s);
    103         }
    104         printf("%d
    ", ans);
    105     }
    106     return 0;
    107 }
    Aguin

    ZOJ 3545 Rescue the Rabbit

    更重要的是状压dp的部分。

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <queue>
      6 using namespace std;
      7 const int maxnode = 1111, sigma_size = 4;
      8 int n, l, w[10];
      9 int dp[2][1111][1111];
     10 
     11 struct Ac_auto
     12 {
     13     int Next[maxnode][sigma_size];
     14     int fail[maxnode];
     15     int val[maxnode];
     16     int sz;
     17 
     18     Ac_auto(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     19     void init(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     20 
     21     int idx(char c)
     22     {
     23         if(c == 'A') return 0;
     24         else if(c == 'G') return 1;
     25         else if(c == 'T') return 2;
     26         return 3;
     27     }
     28 
     29     void insert(char *s, int v)
     30     {
     31         int u = 0, n = strlen(s);
     32         for(int i = 0; i < n; i++)
     33         {
     34             int c = idx(s[i]);
     35             if(!Next[u][c])
     36             {
     37                 memset(Next[sz], 0, sizeof(Next[sz]));
     38                 val[sz] = 0;
     39                 Next[u][c] = sz++;
     40             }
     41             u = Next[u][c];
     42         }
     43         val[u] |= (1 << v);
     44     }
     45 
     46     void build()
     47     {
     48         queue<int> q;
     49         fail[0] = 0;
     50         for(int i = 0; i < sigma_size; i++) if(Next[0][i])
     51         {
     52             fail[Next[0][i]] = 0;
     53             q.push(Next[0][i]);
     54         }
     55         while(!q.empty())
     56         {
     57             int pos = q.front(); q.pop();
     58             for(int i = 0; i < sigma_size; i++)
     59             {
     60                 if(!Next[pos][i]) Next[pos][i] = Next[fail[pos]][i];
     61                 else
     62                 {
     63                     fail[Next[pos][i]] = Next[fail[pos]][i];
     64                     q.push(Next[pos][i]);
     65                 }
     66                 val[Next[pos][i]] |= val[fail[Next[pos][i]]];
     67             }
     68         }
     69     }
     70 
     71     void solve()
     72     {
     73         memset(dp[0], 0, sizeof(dp[0]));
     74         dp[0][0][0] = 1;
     75         int cur = 1;
     76         for(int i = 0; i < l; i++)
     77         {
     78             memset(dp[cur], 0, sizeof(dp[cur]));
     79             cur ^= 1;
     80             for(int j = 0; j < sz; j++)
     81             {
     82                 for(int k = 0; k < (1 << n); k++)
     83                 {
     84                     if(!dp[cur][j][k]) continue;
     85                     for(int p = 0; p < 4; p++) dp[cur^1][Next[j][p]][k|val[Next[j][p]]] = 1;
     86                 }
     87             }
     88         }
     89         int ans = -1;
     90         for(int i = 0; i < sz; i++)
     91         {
     92             for(int j = 0; j < (1 << n); j++)
     93             {
     94                 if(!dp[cur^1][i][j]) continue;
     95                 int tmp = 0;
     96                 for(int k = 0; k < n; k++)
     97                     if( j & (1 << k) ) tmp += w[k];
     98                 ans = max(ans, tmp);
     99             }
    100         }
    101         if(ans == -1) puts("No Rabbit after 2012!");
    102         else printf("%d
    ", ans);
    103     }
    104 
    105 }ACA;
    106 
    107 int main(void)
    108 {
    109     while(~scanf("%d %d", &n, &l))
    110     {
    111         ACA.init();
    112         for(int i = 0; i < n; i++)
    113         {
    114             char tmp[111];
    115             scanf("%s %d", tmp, w+i);
    116             ACA.insert(tmp, i);
    117         }
    118         ACA.build();
    119         ACA.solve();
    120     }
    121     return 0;
    122 }
    Aguin

    12.9

    什么都没干。

    12.10

    补个CF。

    CF 606 C Sorting Railway Cars

    和一个BC很像。看最长的连续子列有多长。

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 const int maxn = 1e5 + 10;
     5 int a[maxn];
     6 
     7 int main(void)
     8 {
     9     int N, Max = 0;
    10     scanf("%d", &N);
    11     for(int i = 1; i <= N; i++)
    12     {
    13         int x;
    14         scanf("%d", &x);
    15         a[x] = 1;
    16         a[x] += a[x-1];
    17         if(a[x] > Max) Max = a[x];
    18     }
    19     printf("%d
    ", N - Max);
    20     return 0;
    21 }
    Aguin

    CF 606 D Lazy Student

    构造一颗菊花树即可。加边顺序弄错WA到死。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 typedef long long LL;
     6 const int maxn = 1e5 + 10;
     7 
     8 struct edge
     9 {
    10     int id, used, l;
    11     int from, to;
    12 }e[maxn];
    13 
    14 bool cmp1(edge A, edge B)
    15 {
    16     if(A.l != B.l) return A.l < B.l;
    17     return A.used > B.used;
    18 }
    19 
    20 bool cmp2(edge A, edge B)
    21 {
    22     return A.id < B.id;
    23 }
    24 
    25 int main(void)
    26 {
    27     int N, M;
    28     scanf("%d%d", &N, &M);
    29     for(int i = 1; i <= M; i++)
    30     {
    31         scanf("%d%d", &e[i].l, &e[i].used);
    32         e[i].id = i;
    33     }
    34     sort(e+1, e+1+M, cmp1);
    35     int cnt = 0, tot = 0, ok = 1;
    36     for(int i = 1; i <= M; i++)
    37     {
    38         if(e[i].used) cnt++;
    39         else
    40         {
    41             tot++;
    42             if((LL) cnt * (cnt - 1) / 2 < tot) {ok = 0; break;}
    43         }
    44     }
    45     if(ok)
    46     {
    47         int t1 = 1, t2 = 1;
    48         for(int i = 1; i <= M; i++) if(e[i].used)
    49         {
    50             e[i].from = 1;
    51             e[i].to = ++t1;
    52         }
    53         for(int i = 3; i <= N; i++)
    54         {
    55             if(t2 > M) break;
    56             for(int j = 2; j < i; j++)
    57             {
    58                 if(t2 > M) break;
    59                 while(e[t2].used) t2++;
    60                 e[t2].from = i;
    61                 e[t2].to = j;
    62                 t2++;
    63             }
    64         }
    65         sort(e+1, e+1+M, cmp2);
    66         for(int i = 1; i <= M; i++) printf("%d %d
    ", e[i].from, e[i].to);
    67     }
    68     else puts("-1");
    69     return 0;
    70 }
    Aguin

    12.11

    HDU 3341 Lost's revenge

    先是Hash错。自己老是搞很奇怪的Hash。

    然后发现了一个AC自动机的写法上的错误。

    更新val的时候应该在//的位置。而不是循环外(尽管一些题目是对的。

    返回去把写法上不确定的题都重新交了一次。暂无发现问题。

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <queue>
      6 using namespace std;
      7 const int maxnode = 555, sigma_size = 4;
      8 int N, tot, num[4], o[4], tmp[4], dp[25555][555];
      9 char s[100];
     10 
     11 struct Ac_auto
     12 {
     13     int Next[maxnode][sigma_size];
     14     int fail[maxnode];
     15     int val[maxnode];
     16     int sz;
     17 
     18     Ac_auto(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     19     void init(){sz = 1; memset(Next[0], 0, sizeof(Next[0]));}
     20 
     21     int idx(char c)
     22     {
     23         if(c == 'A') return 0;
     24         else if(c == 'G') return 1;
     25         else if(c == 'C') return 2;
     26         return 3;
     27     }
     28 
     29     void insert(char *s)
     30     {
     31         int u = 0, n = strlen(s);
     32         for(int i = 0; i < n; i++)
     33         {
     34             int c = idx(s[i]);
     35             if(!Next[u][c])
     36             {
     37                 memset(Next[sz], 0, sizeof(Next[sz]));
     38                 val[sz] = 0;
     39                 Next[u][c] = sz++;
     40             }
     41             u = Next[u][c];
     42         }
     43         val[u] += 1;
     44     }
     45 
     46     void build()
     47     {
     48         queue<int> q;
     49         fail[0] = 0;
     50         for(int i = 0; i < sigma_size; i++) if(Next[0][i])
     51         {
     52             fail[Next[0][i]] = 0;
     53             q.push(Next[0][i]);
     54         }
     55         while(!q.empty())
     56         {
     57             int pos = q.front(); q.pop();
     58             for(int i = 0; i < sigma_size; i++)
     59             {
     60                 if(!Next[pos][i]) Next[pos][i] = Next[fail[pos]][i];
     61                 else
     62                 {
     63                     fail[Next[pos][i]] = Next[fail[pos]][i];
     64                     q.push(Next[pos][i]);
     65                     val[Next[pos][i]] += val[fail[Next[pos][i]]]; //update val[]
     66                 }
     67             }
     68         }
     69     }
     70 
     71     int solve()
     72     {
     73         int ret = 0;
     74         memset(dp, -1, sizeof(dp));
     75         dp[0][0] = 0;
     76         for(int i = 0; i <= tot; i++)
     77         {
     78             for(int j = 0; j < sz; j++)
     79             {
     80                 if(dp[i][j] == -1) continue;
     81                 int p = i;
     82                 for(int k = 3; k >= 0; k--) tmp[k] = p / num[k], p %= num[k];
     83                 for(int k = 0; k < 4; k++)
     84                 {
     85                     if(tmp[k] >= o[k]) continue;
     86                     dp[i+num[k]][Next[j][k]] = max(dp[i+num[k]][Next[j][k]], dp[i][j] + val[Next[j][k]]);
     87                 }
     88                 ret = max(ret, dp[i][j]);
     89             }
     90         }
     91         return ret;
     92     }
     93 
     94 }ACA;
     95 
     96 int main(void)
     97 {
     98     int kase = 0;
     99     while(~scanf("%d", &N) && N)
    100     {
    101         ACA.init();
    102         for(int i = 0; i < N; i++)
    103         {
    104             char tmp[111];
    105             scanf("%s", tmp);
    106             ACA.insert(tmp);
    107         }
    108         ACA.build();
    109         scanf("%s", s);
    110         memset(o, 0, sizeof(o));
    111         for(int i = 0; s[i]; i++)
    112         {
    113             if(s[i] == 'A') o[0]++;
    114             else if(s[i] == 'G') o[1]++;
    115             else if(s[i] == 'C') o[2]++;
    116             else o[3]++;
    117         }
    118 
    119         num[0] = 1;
    120         num[1] = o[0] + 2;
    121         num[2] = num[1] * (o[1] + 1) + 1;
    122         num[3] = num[2] * (o[2] + 1) + 1;
    123 
    124         tot = 0;
    125         for(int i = 0; i < 4; i++) tot += num[i] * o[i];
    126 
    127         printf("Case %d: %d
    ", ++kase, ACA.solve());
    128     }
    129     return 0;
    130 }
    Aguin

    12.12

    打个BC。

  • 相关阅读:
    Linux配置环境变量
    入坑CV DL一些基础技能学习
    (Linux)初探cmake .和make命令
    Django rest framework 之分页
    Django rest framework 之版本
    通用权限框架
    堡垒机
    kingadmin
    CRM 客户关系管理系统
    Torando 入门
  • 原文地址:https://www.cnblogs.com/Aguin/p/5027267.html
Copyright © 2020-2023  润新知