zoukankan      html  css  js  c++  java
  • #70.gee

    Description

    内部题目,不放链接了。

    Solution

    类似于状压 (dp),我们对于每一位分别处理。

    判断同一个父节点的两个儿子,若对应位字母相同,则不处理。

    若不同,就把状态 起来,并把差异值加一。

    然后……就没有然后了。

    这题可以用 (bitset) 维护。

    Code

    #include <iostream>
    #include <cstdio>
    #include <bitset>
    
    using namespace std;
    
    const int N = 1030;
    int n, m, ans;
    char s[N][N];
    bitset <26> f[N];
    
    void solve(int x){
        for(int i = 1; i <= n; i++)
            f[i].reset(), f[i][s[i][x] - 'A'] = 1;
        for(int i = (n >> 1); i; i >>= 1)
            for(int j = 1; j <= i; j++){
                int l = (j << 1) - 1, r = j << 1;
                if((f[l] & f[r]).count()) f[j] = f[l] & f[r];
                else f[j] = f[l] | f[r], ans++;
            }
        for(int i = 0; i < 26; i++)
            if(f[1][i]){
                putchar(i + 'A');
                break;
            }
        return;
    }
    
    int main(){
        scanf("%d%d", &n, &m);
        for(int i = 1; i <= n; i++)
            scanf("%s", s[i]);
        for(int i = 0; i < m; i++)
            solve(i);
        printf(" %d
    ", ans);
        return 0;
    }
    

    End

    本文来自博客园,作者:xixike,转载请注明原文链接:https://www.cnblogs.com/xixike/p/15336029.html

  • 相关阅读:
    2020/4/15
    2020/4/14
    2020/4/13
    2020/4/12
    2020/4/11
    2020/4/9
    PTA录入数据库题目流程
    PTA录题
    2020/4/8
    如何把mysql workbench的数据结构和数据导出到sql表中
  • 原文地址:https://www.cnblogs.com/xixike/p/15336029.html
Copyright © 2011-2022 走看看