题意:

一个屏幕要同时打开9个窗口,每个窗口是2*2的矩阵,整个屏幕大小是9*9,每个窗口位置固定。

但是是否被激活(即完整显示出来)不确定。

给定屏幕状态,问是否可以实现显示。

分析:拓扑排序,把完全出现的数字拿出来,位置置空,然后再找下一个完全出现的数,直到找完为止,若中途找不到,则不合法。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int map[],pos[][],vis[];
void init()
{
int i=,j=;
while(i<=)
{
pos[i][]=j;pos[i][]=j+;pos[i][]=j+;pos[i][]=j+;
if(i%==)j+=;
else j+=;
i++;
}
}
bool ok(int x)
{
for(int i=;i<=;i++)
if(map[pos[x][i]]!=x&&map[pos[x][i]]!=)
return false;
return true;
}
void work()
{
int tot=;
while()
{
int k=;
for(int i=;i<=;i++)
if(!vis[i]&&ok(i))
{
tot++;
vis[i]=;
k=i;
break;
}
if(!k)break;
for(int i=;i<=;i++)
map[pos[k][i]]=;
}
if(tot<)printf("THESE WINDOWS ARE BROKEN\n");
else printf("THESE WINDOWS ARE CLEAN\n");}int main(){
init();
while()
{
memset(vis,,sizeof(vis));
string s;cin>>s;
if(s[]=='O')break;
for(int i=;i<=;i++)
scanf("%d",&map[i]);
work();
cin>>s;
}
return ;
}

最新文章

  1. C语言的概述--学习c的第二天
  2. Maven-在eclipse中安装Maven插件
  3. docker-compose常用命令
  4. Docker Machine
  5. js高级教程第3版笔记(我的理解)陆续更新中
  6. JS原型的剖析与理解
  7. C#串口扫描
  8. 一步一步学android之控件篇——ScrollView
  9. hdu_5085_Counting problem(莫队分块思想)
  10. js删除最后一个字符串方法
  11. (一)Redis在windows下的安装和使用
  12. HNOI2015 Day 1
  13. ajax全局事件
  14. 轻松3步设置sublime text2/sublime text3的预览浏览器
  15. Vue和React的对比
  16. 基于mindwave脑电波进行疲劳检测算法的设计(1)
  17. java System.arraycopy()
  18. 超感猎杀/超感八人组第一季至二季/全集Sense8迅雷下载
  19. myeclipse安装jad反编译插件
  20. Django之Models的class Meta

热门文章

  1. Linux普通到root用户切换-转
  2. ADO.net数据访问
  3. Prim算法以及Kruskal算法
  4. Godaddy域名301跳转问题处理
  5. SQL将查询出来的多列的值拼接成一个字符串
  6. vue2.0版本指令v-if与v-show的区别
  7. 自制无线共享工具C++源代码及创建过程
  8. 迅为I.MX6Q开发板配不同分辨率不同尺寸液晶屏幕
  9. Java加密简介
  10. CAD参数绘制角度标注(com接口)