南邮 OJ 1652 翻转棋
翻转棋
总提交 : 41 测试通过 : 20
比赛描述
翻转棋的棋盘上有64颗棋子,排列成8×8的矩阵。每颗棋子的正反两面分别被涂成白色和黑色。在初始状态下,其中有一些棋子正面朝上(白色),其余的则背面朝上(黑色)。你可以进行如下翻转操作——翻转任意一颗棋子,与此同时与它相邻的上下左右四颗棋子也必须一同翻面。现在给出棋盘的初始状态,请编程计算出至少要进行多少次翻转操作才能让所有的棋子黑色的一面朝上。
输入
输入的第一行是一个正整数N,代表有N组输入数据。每组数据包含一个8×8的矩阵表示棋盘的初始状态,‘0’代表白色,‘1’代表黑色。两组数据之间以一个空白行分隔。
输出
对于每一组输入数据,输出一行“Case #: n”。其中‘#’为这一组输出的序号,n为让所有棋子反面向上最少所需的翻转次数。
样例输入
2
10111111
00011111
10111111
11111111
11111111
11111111
11111111
11111111
10110001
00011011
10111111
11111111
11111011
11110001
11111111
11110001
样例输出
Case 1: 1
Case 2: 4
提示
题目来源
lithium
#include<iostream>#define N 8
char a[N][N];
char b[N][N];
int dx[4] = { 0, 0,-1, 1};
int dy[4] = {-1, 1, 0, 0};
int minCount;void convert(int i,int j){int k,x,y;b[i][j] = !b[i][j];for(k=0;k<4;k++){x = i+dx[k];y = j+dy[k];if(x>=0 && x<N && y>=0 && y<N){b[x][y] = !b[x][y];}}
}void handle(int k){int i,j,count=0;for(i=0;i<N;i++){for(j=0;j<N;j++){b[i][j] = a[i][j];}}for(j=0;j<N;j++){if(k & (1<<j)){convert(0,j);count++;}}for(i=1;i<N;i++){for(j=0;j<N;j++){if(0==b[i-1][j]){convert(i,j);count++;}}}for(j=0;j<N;j++){if(b[N-1][j]==0){return;}}if(count < minCount){minCount = count;}
}int main(){
// freopen("test.txt","r",stdin);int t,i,j,k;scanf("%d",&t);getchar();for(int cas=1;cas<=t;cas++){minCount = INT_MAX;for(i=0;i<N;i++){for(j=0;j<N;j++){a[i][j] = getchar();a[i][j] -= '0';}getchar();}getchar();
// for(i=0;i<N;i++){
// for(j=0;j<N;j++){
// printf("%d",a[i][j]);
// }
// printf("\n");
// }for(k=0;k<255;k++){handle(k);}printf("Case %d: %d\n",cas,minCount);}
}
南邮 OJ 1652 翻转棋相关推荐
- 南邮 OJ 1484 烧饼重叠问题
烧饼重叠问题 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 87 测试通过 : 12 ...
- 南邮 OJ 1076 机器狗组装费用
机器狗组装费用 时间限制(普通/Java) : 1500 MS/ 4500 MS 运行内存限制 : 65536 KByte 总提交 : 513 测试通过 : ...
- 南邮 OJ 1668 撼地神牛
撼地神牛 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 780 测试通过 : 77 比 ...
- 南邮 OJ 1987 集训队选拔
集训队选拔 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 823 测试通过 : 303 ...
- 南邮 OJ 1128 An Industrial Spy
An Industrial Spy 时间限制(普通/Java) : 10000 MS/ 30000 MS 运行内存限制 : 65536 KByte 总提交 : 38 ...
- 南邮 OJ 2001 水獭看动漫
水獭看动漫 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 103 测试通过 : 31 ...
- 南邮 OJ 2043 有才华的罗老师
有才华的罗老师 时间限制(普通/Java) : 2000 MS/ 6000 MS 运行内存限制 : 65536 KByte 总提交 : 60 测试通过 : 3 ...
- 南邮 OJ 1176 高斯求和
高斯求和 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 3327 测试通过 : 568 ...
- 南邮 OJ 1446 嘉娃的难题
嘉娃的难题 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 127 测试通过 : 43 ...
最新文章
- java mybatis基础
- Android线程池简单使用
- Android studio 报错解决:Error:SSL peer shut down incorrectly
- [AngularJS] “多重路由”嵌套模块——AngularJS“路由”嵌套学习资料教程
- Spring 是解析配置类过程详解
- 笔记-高项案例题-2009年上-需求管理
- junit4 javaee 5.0 jpa SSH 单元测试问题集锦
- System.Web.HttpRequestValidationException——从客户端检测到危险的Request值
- 174. Dungeon Game 地下城游戏
- 27.怎样在Swift中声明typedef?
- 学习关于时间在sql里面的对比,用if语句(这个有点特别)
- Linux中fork的秘密
- DSP C2000汇编语言,DSPC2000汇编指令
- linux ntp时间立即同步命令_记一次生产环境部署NTP服务及配置时间同步
- ipv6路由协议配置_IPV6寻址,标头和路由协议
- 颇有微词 小模式 大蓝海 by 曹继忠 - 2013中国SEO排行榜
- codeFight-Python编程训练(2)
- MySQL Config--参数system_time_zone和参数time_zone
- 学知识的时候,把自己放的低一点
- mysql开发与运维_专业的MySQL开发规范