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