博客
关于我
POJ算法练习-特殊密码锁
阅读量:259 次
发布时间:2019-03-01

本文共 1380 字,大约阅读时间需要 4 分钟。

关键是要想清楚,最边上可以翻转,也可以不翻转,在这两种情况定下来后,后面的逐一比较。实际上这就是最少的操作数

#include 
#include
#include
#include
using namespace std; int oriLock;int lock;int destLock;inline void SetBit(int & n,int i,int v){ if(v) n |= (1 << i); //把第i位设为1 else n &= ~(1 << i); //把第i位设为0 }inline void FlipBit(int & n,int i){ n ^= (1 << i); //反转第i位 }inline int GetBit(int n,int i){ return (n >> i) & 1; //取出第i位 }int main(){ char line[40]; //字符数组储存二进制数字 destLock = lock = oriLock = 0; //oriLock为原始结果,destLock为目标结果 cin >> line; int N = strlen(line); //长度 for(int i = 0; i < N; ++i) //将字符串转化为二进制数字 SetBit(oriLock,i, line[i] - '0'); cin >> line; for(int i = 0; line[i]; ++i) SetBit(destLock,i, line[i] - '0'); int minTimes = 1 << 30; for(int p = 0; p < 2; ++p) { lock = oriLock; int times = 0; int curButton = p; for(int i = 0; i < N; ++i) { if(curButton) { ++ times; if( i > 0) //如果i大于0,那么i后一位也翻转 FlipBit(lock,i-1); FlipBit(lock,i); if( i < N-1) //如果i小于N-1,那么i前一位也翻转 FlipBit(lock,i+1); } if( GetBit(lock,i) != GetBit(destLock,i)) // curButton = 1; //执行翻转 else curButton = 0; //否就跳过 } if( lock == destLock) minTimes = min(minTimes ,times); } if( minTimes == 1 << 30) cout << "impossible" << endl; else cout << minTimes << endl; return 0;}

转载地址:http://bdhv.baihongyu.com/

你可能感兴趣的文章
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>