Gym 101572D Distinctive Character【思维+Bfs】
来源:互联网 发布:gentoo网络 编辑:程序博客网 时间:2024/06/05 07:29
题目大意:
给出N个长度为K的01串,现在让我们构造出来一个长度为K的01串,使得这N个串和构造出来的串的最大相似度最小。
相似度定义为两个字符串相等的位子的个数。
思路:
①因为长度并不大,而且N也不大 ,解题的时候总会想偏。
②其实这个题我们只要一遍Bfs即可,设定Vis【i】表示二进制串在十进制表示下为数字i的字符串是否遍历到了。
那么对于一个串101111来说,其距离为1的串有:001111 111111 100111 101011 101101 101110
那么过程中我们维护一下距离原来串最远的那个串是谁就行了。
时间复杂度O(2^k*k);
Ac代码:
#include<stdio.h>#include<string.h>#include<queue>using namespace std;struct node{ int val,step;}now,nex;int vis[2000000];char a[110000][22];int n,k;void Bfs(){ memset(vis,0,sizeof(vis)); queue<node>s; for(int i=0;i<n;i++) { int sum=0; for(int j=0;j<k;j++) { if(a[i][j]=='1')sum+=(1<<j); } vis[sum]=1; now.val=sum,now.step=0; s.push(now); } int maxn=-1; int val=0; while(!s.empty()) { now=s.front(); s.pop(); if(now.step>maxn) { maxn=now.step; val=now.val; } for(int i=0;i<k;i++) { if((now.val&(1<<i))>0) { nex.val=now.val-(1<<i); } else nex.val=now.val+(1<<i); if(vis[nex.val]==0) { vis[nex.val]=1; nex.step=now.step+1; s.push(nex); } } } int i=0; char ans[25]; memset(ans,'0',sizeof(ans)); while(val) { ans[i++]=val%2+'0'; val/=2; } for(int i=0;i<k;i++) { printf("%c",ans[i]); } printf("\n");}int main(){ while(~scanf("%d%d",&n,&k)) { for(int i=0;i<n;i++)scanf("%s",a[i]); Bfs(); }}
阅读全文
0 0
- Gym 101572D Distinctive Character【思维+Bfs】
- Gym 101572 D- 多源bfs- Distinctive Character
- Gym 101572 DDistinctive Character [bfs+想法]
- Distinctive Character
- Gym 100796D Journey(BFS)
- GYM 100801D Distribution in Metagonia【思维】
- 思维-Gym
- Codeforces 327D Block Tower【思维+Bfs】
- Codeforces 330D Biridian Forest【思维+Bfs】
- Codeforces 586D Phillip and Trains【思维+Bfs】好题~!
- Codeforces Round #408 (Div. 2) D.Police Stations【Bfs+思维】
- Codeforces 796D Police Stations (bfs+思维)
- Codeforces 811D Vladik and Favorite Game【思维+Bfs】
- Codeforces Round #408 (Div. 2) D.Police Stations【Bfs+思维】
- Codeforces 877D Olya and Energy Drinks【思维优化Bfs】
- 翻译题-思维-Gym
- 【思维】Cupcakes Gym
- Gym 101572E Emptying Baltic【优先队列+BFS】
- LeetCode:Best Time to Buy and Sell Stock III
- Linux学习路径(图)
- 小程序跳转刷新
- imagick的简单使用
- Linux应用编程基础--(6)守护进程
- Gym 101572D Distinctive Character【思维+Bfs】
- three.js 01-06 之使用 ASCII 效果
- 可能是MacOS中最好用的集成开发工具-Xcode初学者(C/C++ 新生)教程
- 定时编译java代码设置
- MWC 2016上海:无人机成为热点
- 第九届APEC技展会上,将有哪些大牛来论剑?
- 乐视生态要从娃娃抓起丨唯物周刊
- MWC上海2016 | 互联汽车在中国发展迅速,“服务”和“共享”才是未来
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第六章 贪心算法