2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

Posted RRRR_wys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)相关的知识,希望对你有一定的参考价值。

D.Distinctive Character

看到样例,第一个反应贪心。先写了个按这一位1和0的数目多少,确定0还是1的东西。感觉不够真,又写了个尽量加到相似的比较小的串上的贪心。在和前边的那个组合一下,换了换顺序。。。好吧就过了13组样例。。。正解如下:考虑如何求出,所有2^k个状态与这n个串的最大相似度。起初的n个串的答案显然为k,那改变一个位置,相似度就改变为k-1,对于一个状态,越早算出来的相似度,越大,那么就可以直接bfs求出所有状态的最大相似度了。答案就是取最小值的状态。

#include <bits/stdc++.h>
#define mem(W) memset(W,0,sizeof(W))
using namespace std;
int n, k, a[1<<23], b[1<<23];
char s[25];
int q[1<<23],l=0,r=0;
int main(){
    scanf("%d%d",&n,&k);
    for(int i=0;i<(1<<k);++i)b[i]=-1;
    for(int i=1;i<=n;++i) {
        scanf(" %s",s);
        for(int j=0;j<k;++j) a[i]=a[i]*2+(s[j]-‘0‘);
        q[r]=a[i];++r;
        b[a[i]]=k;
    }
    while(l<r){
        int S=q[l]; ++l;
        for(int i=0;i<k;++i){
            if(b[S^(1<<i)]==-1){
                b[S^(1<<i)]=b[S]-1;
                q[r]=S^(1<<i); ++r;
            }
        }
    }
    int MN=10000,ans=0;
    for(int i=0;i<(1<<k);++i){
        if(MN>b[i]){
            MN=b[i];
            ans=i;
        }
    }
    for(int i=k-1;i>=0;--i)printf("%d",!!(ans&(1<<i)));puts("");
}

  

以上是关于2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)的主要内容,如果未能解决你的问题,请参考以下文章

2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018) A. Altruistic Amphibians DP(示

2017-2018 ACM-ICPC, Asia Daejeon Regional Contest

2017-2018 ACM-ICPC, Asia Tsukuba Regional Contest

2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest

(寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)

训练20191007 2017-2018 ACM-ICPC Latin American Regional Programming Contest