博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Problem D: Flip Five
阅读量:5221 次
发布时间:2019-06-14

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

大致题意:3 * 3的黑白格,在翻转的时候会本身和四周的都翻转,问最小翻转几次变成全部是白色

解题思路:把3 * 3 = 9 个格子进行全排列,然后穷举然后找翻转的最小次数

#include 
#include
#include
using namespace std;int dr[] = {
0,1,0,-1,0};int dc[] = {
0,0,1,0,-1};int a[1000];bool tmp[10][10];void change(int s){ int x = s / 3; int y = s - x * 3; for(int i = 0;i < 5;i++){ int xx = x + dr[i]; int yy = y + dc[i]; if(xx >= 0 && yy >= 0 && xx < 3 && yy < 3) tmp[xx][yy] = !tmp[xx][yy]; }}bool check(){ for(int i = 0;i < 3;i++){ for(int j = 0;j < 3;j++) if(tmp[i][j]) return false; } return true;}int main(){#ifndef ONLINE_JUDGE // freopen("in.in","r",stdin);#endif int t; cin >> t; while(t--){ char str[10][10]; for(int i = 0;i < 3;i++){ cin >> str[i]; } for(int i = 0;i < 1000;i++) a[1000] = 100; int num = 0; for(int i = 0;i < (1 << 9);i++){ int cnt = 0; for(int r = 0;r < 3;r++){ for(int c = 0;c < 3;c++){ if(str[r][c] == '*') tmp[r][c] = 1; else tmp[r][c] = 0; } } for(int j = 0;j < 9;j++){ if(i & (1 << j)){ change(j); cnt++; } } if(check()){ a[num++] = cnt; } } sort(a,a+num); cout << a[0] << endl; } return 0;}
Code
for(int i = 0;i < (1 << 9);i++){     for(int j = 0;j < 9;j++){         if(i & (1 << j)){        }       }  }

 

转载于:https://www.cnblogs.com/hanbinggan/p/4256427.html

你可能感兴趣的文章
HBase中MVCC的实现机制及应用情况
查看>>
马达调速器,直流马达调速器,直流调速器
查看>>
【转】概要设计怎么写
查看>>
前端编码规范小记
查看>>
C#编程(二十五)----------接口
查看>>
c如何弹出保存路径/保存文件对话框
查看>>
HTML标签二
查看>>
caffe的在ubuntu下面的安装
查看>>
Python 3语法小记(九) 异常 Exception
查看>>
使用shared memory 计算矩阵乘法 (其实并没有加速多少)
查看>>
MySQL常用的函数
查看>>
Django 相关
查看>>
ArcGIS自定义工具箱-字段合并
查看>>
git init
查看>>
Vue(day8)
查看>>
sshpass ssh登录时自动输入密码
查看>>
训练记录
查看>>
【转】ubuntu16.04设置python3为默认及一些库的安装
查看>>
算数几何均值不等式,柯西不等式,琴生Jensen不等式
查看>>
mysql group by的用法 注意
查看>>