Luogu 1764 翻转游戏 - 枚举 + 搜索
题目描述
kkke在一个n*n的棋盘上进行一个翻转游戏。棋盘的每个格子上都放有一个棋子,每个棋子有2个面,一面是黑色的,另一面是白色的。初始的时候,棋盘上的棋子有的黑色向上,有的白色向上。现在kkke想通过最少次数的翻转,使得棋盘上所有的棋子都是同一个颜色向上的(即全是黑色向上的,或全是白色向上的)。每次翻转的时候,kkke可以选择任意一个棋子,将它翻转,同时,与它上下左右分别相邻的4个棋子也必须同时翻转。
输入输出格式
输入格式:
输入的第一行是一个整数n,表示棋盘是n*n的,
接下来有n行,每行包括n个字母,表示初始的棋盘状态。如果字母是w,则表示这个棋子当前是白色向上的,如果字母是b,则表示这个棋子当前是黑色向上的。
输出格式:
输出为一行,如果无法翻转出目标状态,则输出“Impossible”,否则输出一个整数,表示kkke最少需要翻转的次数。
输入输出样例
4
bwwb
bbwb
bwwb
bwww
4
说明
【数据范围】
对于30%的数据,1<=n<=4
对于100%的数据,1<=n<=16
题解
看到这一题, 我试了试 IDA*, 看看能水几分, 没想到只能水30, 果断滚粗。
直接爆搜显然是会TLE 的, 那么只能考虑其他办法。
那么我们枚举第一行的翻转, 并把翻转后的图记录, 进行第二行的搜索。
由于第一行已经不能再翻, 如果第一行存在没有达到目标 颜色的棋子,只能由第二行来翻转。
所以可以根据第一行的颜色 来 给第二行进行翻转, 并且可能性仅一种。
这样一直翻转到最后一行结束, 那么除了最后一行 其他棋子 一定达到了目标颜色。
最后再判断最后一行棋子是否都达到了目标颜色, 如果达到了就更新答案。
代码
原谅我丑的不行的代码
#include<cstring>
#include<algorithm>
#include<cstdio>
#define rep(i,a,b) for( int i = (a); i <= (b); ++i )
#define per(i,a,b) for( int i = (a); i >= (b); --i )
using namespace std; const int N = , inf = ~0U >> ; int n, mp[N][N], ans, tmp[N][N];
char s[N]; int cal( int x , int pos ) {
return (x >> pos) & ;
} int work( int re , int col) {
rep( i, , n - ) rep( j, , n - ) if( tmp[i - ][j] != col ){
re++;
tmp[i][j] ^= ;
tmp[i + ][j] ^= ;
if(j) tmp[i][j - ] ^= ;
if(j != n - ) tmp[i][j + ] ^= ;
}
rep( j, , n - ) if( tmp[n - ][j] != col ) return inf;
return re;
} int dfs() {
int re = inf;
rep( i, , ( << n) - ) rep( col, , ){
rep( j, , n - ) rep( k, , n - ) tmp[j][k] = mp[j][k];
int cnt = ;
rep( j, , n - ) if( cal( i, j ) ) cnt++;
rep( j, , n - ) if( cal( i, j ) ^ cal( i , j - ) ^ cal( i, j + ) ) tmp[][j] ^= ;
rep( j, , n - ) if( cal( i, j ) ) tmp[][j] ^= ;
re = min( re, work(cnt, col) );
}
return re;
} int main()
{
scanf("%d",&n);
rep( i, , n - ) {
scanf("%s",s);
rep( j, , n - ) mp[i][j] = s[j] == 'w';
}
ans = dfs();
if( ans == inf ) printf("Impossible\n");
else printf("%d\n", ans);
}
Luogu 1764 翻转游戏 - 枚举 + 搜索的更多相关文章
- Luogu 1312 【NOIP2011】玛雅游戏 (搜索)
Luogu 1312 [NOIP2011]玛雅游戏 (搜索) Description Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空 ...
- 【BZOJ4945】【NOI2017】游戏(搜索,2-sat)
[NOI2017]游戏(搜索,2-sat) 题面 BZOJ的SPJ是假的 兹磁洛谷 题解 如果没有\(x\)地图的影响 这就是一个裸的\(2-sat\)问题 但是现在有不超过\(8\)个\(x\)地图 ...
- [Luogu P3825] [NOI2017] 游戏 (2-SAT)
[Luogu P3825] [NOI2017] 游戏 (2-SAT) 题面 题面较长,略 分析 看到这些约束,应该想到这是类似2-SAT的问题.但是x地图很麻烦,因为k-SAT问题在k>2的时候 ...
- 294. 翻转游戏 II
题目: 链接:https://leetcode-cn.com/problems/flip-game-ii/ 你和朋友玩一个叫做「翻转游戏」的游戏,游戏规则:给定一个只有 + 和 - 的字符串.你和朋友 ...
- NC235250 牛可乐的翻转游戏
NC235250 牛可乐的翻转游戏 题目 题目描述 牛可乐发明了一种新型的翻转游戏! 在一个有 \(n\) 行 \(m\) 列的棋盘上,每个格子摆放有一枚棋子,每一枚棋子的颜色要么是黑色,要么是白色. ...
- hdu4431 Mahjong 枚举搜索。。
japanese麻将什么玩意..都没有豪华七对... 没什么难的 就是枚举搜索了 分三种类型的胡牌 f1是七对 f2是十三幺 f3是普通的胡牌 就先找一对 再找三个三个的 就是一直超时..在峰峰的指导 ...
- 【BZOJ1501】【NOI2005】智慧珠游戏(搜索)
[BZOJ1501][NOI2005]智慧珠游戏(搜索) 题面 我要一改我懒惰的作风 这道题目必须放题面 Description Input 文件中包含初始的盘件描述,一共有10行,第i行有i个字符. ...
- [Swift]LeetCode293. 翻转游戏 $ Flip Game
You are playing the following Flip Game with your friend: Given a string that contains only these tw ...
- 【2018寒假集训 Day1】【位运算】翻转游戏
翻转游戏(flip) [问题描述] 翻转游戏是在一个 4 格×4 格的长方形上进行的,在长方形的 16 个格上每 个格子都放着一个双面的物件.每个物件的两个面,一面是白色,另一面是黑色, 每个物件要么 ...
随机推荐
- mysql 分配内存大小配置
优化 innodb_buffer_pool_size = 10*1024*1024*1024
- 头部尾部始终处于两端(适用于pc端和移动端)
此代码展示的效果阐述:(随着屏幕宽高度的变化而变化) 当页面内容小于屏幕高度时,头尾分别处在屏幕顶部和屏幕底部: 当页面出现滚动条时,头尾分别处于屏幕顶部和内容底部: <style> *{ ...
- appium的兼容问题
appium 和Android7.0的兼容问题 标签(空格分隔): appium 随着Android系统的不断的迭代更新,目前Android系统都已经更新到9.0系统了,有些小伙伴appium版本还是 ...
- fiddler模拟timeout超时场景
fiddler模拟网络超时: 用fiddler模拟网络请求超时 最近要测试程序对cgi 请求超时的兼容,所以就需要模拟超时,第一个想到的就是fiddler工具,说一下具体的做法: Rules -> ...
- 【Scheme】序列的操作
1.序列的表示 序列 序列(表)是由一个个序对组合而成的,具体来说就是让每个序对的car部分对应这个链的条目,cdr部分则是下一个序对. 对于1->2->3->4这个序列我们可以表示 ...
- 【C++】子类访问父类typedef的问题
class A { public: typedef int* pointer; }; class B :public A { public: pointer b; }; 这段代码运行没有问题,子类继承 ...
- 设置https以及http转https的问题
公司用的是阿里云服务器win2008server r2 ,环境是phpwamp,出现许多问题.2018-11-12 一 设置https 1.设置httpd.ini 取消以下三个配置的# LoadMod ...
- django的优缺点(非原创)
Django 大包大揽,用它来快速开发一些 Web 应用是不错的.如果你顺着 Django 的设计哲学来,你会觉得 Django 很好用,越用越顺手:相反,你如果不能融入或接受 Django 的设计哲 ...
- AWVS结果分析与实践-XSS
今天趁着老师接项目,做了一丢丢实践,以下是一点点感触. 都知道AWVS是神器,可是到我手里就是不灵.拿了它扫了一个URL,结果提示XSS漏洞,实践没反应,只好愉快地享受了过程.来看看. ...
- TZOJ 2546 Electricity(去掉割点后形成的最大连通图数)
描述 Blackouts and Dark Nights (also known as ACM++) is a company that provides electricity. The compa ...