今天碰到一个搜索题,题目是:

7.5  魔板

【问题描述】

有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格。每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗)。我们可以通过若干操作使魔板从一个状态改变为另一个状态。操作的方式有两种:

(1)任选一行,改变该行中所有灯泡的状态,即亮的变暗、暗的变亮;

(2)任选两列,交换其位置。

当然并不是任意的两种状态都可以通过若干操作来实现互相转化的。

你的任务就是根据给定两个魔板状态,判断两个状态能否互相转化。

【输入】

文件中包含多组数据。第一行一个整数k,表示有k组数据。

每组数据的第一行两个整数n和m。(0<n,m≤100)

以下的n行描述第一个魔板。每行有m个数字(0或1),中间用空格分隔。若第x行的  第y个数字为0,则表示魔板的第x行y列的灯泡为“亮”;否则为“暗”。

然后的n行描述第二个魔板。数据格式同上。

任意两组数据间没有空行。

【输出】

共k行,依次描述每一组数据的结果。

若两个魔板可以相互转化,则输出YES,否则输出NO。(注意:请使用大写字母)

【样例】

panel.in

2

3 4

0 1 0 1

1 0 0 1

0 0 0 0

0 1 0 1

失败总结:

最最主要的是,偷懒,选择了打表术.....一开始觉得打表术简单,结果是很多情况都没有考虑到,整节晚自习都在考虑完善打表术,结果后面发现打表术根本行不通!

详细:

1.一开始以为只要每行的0的个数符合一定条件就可以了,但是发现列也要改;

  2.以为列0的数量符合条件就好了,结果发现顺序也是个问题;

3.用string改好顺序了,结果发现判断并不容易;

  4.判断好了,发现 如果一行的0的个数等于m div 2 时,要分类讨论..............

  然后,就超级复杂........

教训:碰到搜索题最好不要用打表术!如果用打表术一定要考虑周全!

不要偷懒!不要鼠目寸光!!!!!!!!!

附:我的失败代码:

 1 program panel;
 2 var
 3    s:array[1..200,1..200] of integer;
 4    jin:array[1..200]of integer;
 5    num2,num3:array[1..200]of string;
 6    st1,st2:string;
 7    w:array[1..200] of longint;
 8    boo:array[1..200]of boolean;
 9    num:array[1..200] of longint;
10    i,j,k,l,h,m,n,q,t:longint;
11    bool,bool2:boolean;
12 begin
13         assign(input,'panel.in');
14         assign(output,'panel.out');
15         reset(input);
16         rewrite(output);
17         read(k);
18         for q:=1 to k do
19         begin
20         fillchar(s,sizeof(s),0);
21         fillchar(num,sizeof(num),0);
22         bool:=true;
23         read(n,m);
24         for i:=1 to 2*n do
25                 for j:=1 to m do
26                 begin
27                         read(s[i,j]);
28                         if s[i,j]=0 then inc(num[i]);
29                 end;
30         i:=1;
31         while((num[i]=num[i+n])or(num[i]+num[i+n]=m))and(i<=n)do
32         begin
33                 inc(i);
34                 if ((num[i]<>num[i+n])and(num[i]+num[i+n]<>m))and(i<=n)
35                 then bool:=false;
36         end;
37         if not bool then writeln('NO')
38         else
39                 begin
40                 h:=0;
41                 for i:=1 to n do
42                         if num[i]=m div 2 then begin inc(h); w[h]:=i; end;
43                 for i:=1 to n do
44                         begin
45                         if (num[i]<>num[i+n])and(num[i]+num[i+n]=m) then
46                                 begin
47                                 for j:=1 to m do
48                                         if s[i,j]=0 then s[i,j]:=1
49                                                 else s[i,j]:=0;
50                                 end;
51                         end;
52                 bool2:=true;
53                 for i:=1 to m do
54                         delete(num2[i],1,length(num2[i]));
55                 for i:=1 to m do
56                         delete(num3[i],1,length(num3[i]));
57                 for j:=1 to m do
58                         for i:=1 to n do
59                                 num2[j]:=num2[j]+chr(s[i,j]+48);
60                 for j:=1 to m do
61                         for i:=n+1 to 2*n do
62                                 num3[j]:=num3[j]+chr(s[i,j]+48);
63                 j:=0;
64                 fillchar(boo,sizeof(boo),true);
65                 bool2:=true;
66                 repeat
67                         inc(j);
68                         t:=0;
69                         repeat
70                         inc(t);
71                         if (num2[j]=num3[t])and(boo[t])then boo[t]:=false;
72                         until((num2[j]=num3[t]))or(t>=m);
73                         if (num2[j]<>num3[t])and(j<=m)
74                         then bool2:=false;
75                 until (num2[j]<>num3[t]) or (j>=m);
76                 if not bool2 then
77                                 begin
78                                 inc(jin[1]);
79                                 e:=1;
80                                 while jin[e]=2 do begin jin[e]:=0; inc(e); inc(jin[e]) end;
81                                 if w[h+1]=1 then write('NO')
82                                 else begin
83                                         for i:=1 to h do
84                                                 if w[h]=1 then
85                                                                 begin{到这里就变得很复杂了!}
86                                         end;
87                                 end;
88                 else writeln('YES');
89                 end;
90                 end;
91         close(input);
92         close(output);
93 end.    

记住教训啊!

2012-10-09

转载于:https://www.cnblogs.com/zyxx233/archive/2012/10/09/2717458.html

cj搜索算法-魔版(打表术失败总结)相关推荐

  1. 数据结构(四) -- C语言版 -- 线性表的链式存储 - 循环链表

    文章目录 零.读前说明 一.循环链表的概述 二.循环链表的模型 2.1.包含头节点模型 2.2.不包含头节点模型 三.工程结构及简单测试案例 3.1.测试工程的目录结构 3.2.循环链表示例源码 3. ...

  2. php表单退出怎么写,PHP提交表单失败后如何保留填写的信息

    [导读]本文章来给各位同学介绍PHP提交表单失败后如何保留填写的信息一些方法总结,最常用的就是使用缓存方式了,这种方法如果网速慢是可能出问题的,最好的办法就是使用ajax了.1.使用header头设置 ...

  3. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  4. 帝国cms 打开打开转换表文件失败!

    帝国cms 升级到最新版6.6 后 生成列表页面和 搜索 时出现 "打开打开转换表文件失败!"  跟踪文件找到 include($file); 这行代码时出错 非常纳闷,这个是ph ...

  5. c语言折半查找输出坐标,数据结构(C语言版)——有序表查找(折半查找)(代码版)...

    数据结构(C语言版)--有序表查找(折半查找)(代码版) 数据结构(C语言版)--有序表查找(折半查找)(代码版) #include #include #define ERROR 0 #define ...

  6. c语言线性表库函数大全,数据结构(C语言版)-线性表习题详解

    <数据结构(C语言版)-线性表习题详解>由会员分享,可在线阅读,更多相关<数据结构(C语言版)-线性表习题详解(23页珍藏版)>请在人人文库网上搜索. 1.数 据 结 构 ,线 ...

  7. 王码五笔86版字根表图与字根助记词

    王码五笔86版字根表图: G 王旁青头戋(兼)五一("兼"与"戋"同音)    F 土士二干十寸雨 (可别忘了革字底)    D 大犬三羊古石厂 (羊底龙头套上 ...

  8. 为什么服务器运行失败怎么回事,服务器运行失败_Win7旗舰版提示服务器运行失败怎么解决...

    摘要 腾兴网为您分享:Win7旗舰版提示服务器运行失败怎么解决,想看视频,汤圆,手柄助手,时间相机等软件知识,以及刷棒棒糖软件,excel2016,传奇手机,英语100分,诛仙,肯德基外卖广州,金山沙 ...

  9. 看得见的数据结构Android版之表的数组实现(视图篇)

    数据结构-表.png 零.前言: 1.本文的姊妹篇:看得见的数据结构Android版之表的数组实现(数据结构篇) 2.希望你可以和我在Github一同见证:DS4Android的诞生与成长,欢迎sta ...

最新文章

  1. UIView Animation
  2. 科技业务同比增长超20%,中国平安“金融+科技”成了吗?
  3. 解决Mac nginx问题 [emerg] 54933#0: bind() to 0.0.0.0:80 failed (13: Permission denied)
  4. 共治共创视角下的开放数据发展:趋势、挑战和反思
  5. OpenShift 4 - 为Gogs构建一个Operator
  6. 外挂辅助技术-计算怪物与玩家的距离
  7. cubase计算机音乐,Cubase与Nuendo电脑音乐制作从新手到高手 (200例)
  8. bzoj3375[Usaco2004 Mar]Paranoid Cows 发疯的奶牛*
  9. CodeForces - 863B-Kayaking(暴力)
  10. 西游记中孙悟空大闹天宫时期被孙悟空打败的
  11. php 排它性,排他性
  12. 云原生在京东丨揭秘五大云原生项目在京东的落地实践
  13. 【源自paddlex】基于PaddleX的钢板表面缺陷检测
  14. 数据结构C语言描述——用单链表实现多项式的相加
  15. vss 2005 手册
  16. WMI系列--关于WMI
  17. 简单的jq实现树形菜单
  18. java 方法互斥_java – 互斥方法
  19. CSDN会员他到底有什么用?
  20. 高等教育学:学生与教师

热门文章

  1. linux7虚拟机修改主机名,centos 7 更改网卡名,主机名,虚拟机添加网卡
  2. 文本框怎么变大html,如何设置HTML文本框的大小?
  3. 2.1.3 码元、波特、速率、带宽
  4. 主瓣,旁瓣,栅瓣概念解析
  5. 对异步脉冲信号的处理——不归0翻转电路
  6. 电子对抗中DRFM的基本原理
  7. java有无参数求长方形的周长面积_用java面向对象思想编程求长方形的周长和面积...
  8. python交互界面的退出
  9. 大话中文文本分类之前数据处理
  10. 研究人工智能最应该注意的问题