[编程题] 01翻转
来源:互联网 发布:网络推广要学哪些课程 编辑:程序博客网 时间:2024/06/08 02:04
牛牛正在挑战一款名为01翻转的游戏。游戏初始有A个0,B个1,牛牛的目标就是把所有的值都变为1,每次操作牛牛可以任意选择恰好K个数字,并将这K个数字的值进行翻转(0变为1,1变为0)。牛牛如果使用最少的操作次数完成这个游戏就可以获得奖品,牛牛想知道最少的操作次数是多少?
例如:A = 4 B = 0 K = 3
0000 -> 1110 -> 1001 -> 0100 -> 1111
需要的最少操作次数为4
输入描述:
输入为一行:
一共三个整数A(0 ≤ A ≤ 100,000),B(0 ≤ B ≤ 100,000),K(1 ≤ K ≤100,000).以空格分隔
输出描述:
输出一个整数,表示最少需要的操作次数。如果不能完成,则输出-1
输入例子:
4 0 3
输出例子:
4
bfs模板题
#include"iostream"#include"queue"#include"string.h"using namespace std;bool sign[200100];int he;int a,b,k;struct node{ int x,step;};int bfs(){ node mm,nn; mm.x=a; mm.step=0; sign[mm.x]=true; queue<node> jj; jj.push(mm); while(!jj.empty()) { nn=jj.front(); jj.pop(); if(nn.x==0) { return nn.step; } for(int i=0;i<=k;i++) { if(i<=nn.x&&(k-i)<=he-nn.x) { mm=nn; mm.x=mm.x+k-2*i; if(!sign[mm.x]) { sign[mm.x]=true; mm.step++; jj.push(mm); } } } } return -1;}int main(){ memset(sign,0,sizeof(sign)); cin>>a>>b>>k; he=a+b; cout<<bfs()<<endl; return 0;}
0 0
- [编程题] 01翻转
- [编程题] 01翻转
- [编程题] 数字翻转
- 编程题 翻转数组
- [编程题]骰子翻转
- [编程题] 棋子翻转
- [编程题] 数字翻转
- [编程题] 数字翻转
- [编程题] 偶数大翻转
- 编程题#1:单词翻转
- [编程题]翻转子串
- 网易编程题--数字翻转
- 网易 编程题 数字翻转
- 网易校招编程题 翻转数字
- [编程题]数字翻转(大数加法)
- c编程:数字翻转
- 编程:字符串翻转Java
- 01翻转
- 冒泡排序
- linux 文件基础介绍
- 分布式事物处理方式要点
- this指针
- zookeeper学习心得一:基础讲解---zk节点类型以及对节点的相应操作
- [编程题] 01翻转
- 第二行代码学习笔记——第一章:开始启程——你的第一行Android代码
- weibo客户端访问网页链接解析缓存问题?
- 集合框架-泛型高级之通配符
- H3C网络设备策略路由功能浅析
- IntelliJ IDEA 中的版本控制介绍(上)
- 《UNIX环境高级编程》开发环境配置:apue.h头文件
- java--16--系统函数
- 第三十九将项目二 输出1000以内的所有完数