zoukankan      html  css  js  c++  java
  • 牛客练习赛41D(思维转化)

    AC通道

    要点

    • 思路:题解中将所求进行转化$$max{相似度} = max{M-不相似度} = M-min{不相似度}$$因此转化为求某01串T与所给众S串的最小不相似度,而最终答案是选取最小不相似度最大的那个。
    • 方法:转化后就可以运用广搜得到所求,即从起始串开始修改某一位,第一次得到此串即为它的最小不相似度。因为只有20位,所以全部枚举后总复杂度(O(NM+2^{M+1}))
    • FWT待学习……
    #include <cstdio>
    #include <cstring>
    #include <queue>
    using std::queue;
    using std::max;
    
    int N, M, d[1 << 21], ans;
    char s[25];
    queue<int> Q;
    
    int main() {
        scanf("%d %d", &N, &M);
        memset(d, -1, sizeof(int) * (1 << (M + 1)));
        for (int i = 0; i < N; i++) {
            scanf("%s", s);
            int t = 0;
            for (int j = M - 1; ~j; --j) {
                t += (s[j] - '0') * (1 << (M - j - 1));
            }
            Q.push(t);
            d[t] = 0;
        }
        while (Q.size()) {
            int t = Q.front(); Q.pop();
            ans = max(ans, d[t]);
            for (int i = 0; i < M; i++) {
                if (d[t ^ (1 << i)] == -1) {
                    d[t ^ (1 << i)] = d[t] + 1;
                    Q.push(t ^ (1 << i));
                }
            }
        }
        return !printf("%d
    ", M - ans);
    }
    
  • 相关阅读:
    遇到的函数知识
    网络编程
    python中的并发编程
    Django contenttypes组件
    同源策略定义及跨域解决方案
    Django Rest framework
    RESTful API
    python 给对象添加方法
    python 装饰器(复杂一点的)
    android动态替换Fragment向下传递数据
  • 原文地址:https://www.cnblogs.com/AlphaWA/p/10801274.html
Copyright © 2011-2022 走看看