pojWindow Pains(拓扑排序)
题目链接:
题意:
一快屏幕分非常多区域,区域之间能够相互覆盖,要覆盖就把属于自己的地方所有覆盖。
给出这块屏幕终于的位置。看这块屏幕是对的还是错的。。
思路:
拓扑排序,这个简化点说,就是说跟楚河汉界一样。。分的清清楚楚,要么这块地方是我的,要么这块地方是你的,不纯在一人一办的情况,所以假设排序的时候出现了环,那么就说这快屏幕是坏的。。
。另一点细节要注意的是第i个数字究竟属于第几行第几列。所以这个要发现规律,然后一一枚举就能够了。。
题目:
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 1588 | Accepted: 792 |
Description
and brings whatever window he currently needs to work with to the foreground. If his screen were a 4 x 4 grid of squares, each of Boudreaux's windows would be represented by the following 2 x 2 windows:
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
When Boudreaux brings a window to the foreground, all of its squares come to the top, overlapping any squares it shares with other windows. For example, if window 1and then window 2 were brought to the foreground, the resulting representation
would be:
|
If window 4 were then brought to the foreground: |
|
. . . and so on . . .
Unfortunately, Boudreaux's computer is very unreliable and crashes often. He could easily tell if a crash occurred by looking at the windows and seeing a graphical representation that should not occur if windows were being brought to the foreground correctly.
And this is where you come in . . .
Input
A single data set has 3 components:
- Start line - A single line:
START - Screen Shot - Four lines that represent the current graphical representation of the windows on Boudreaux's screen. Each position in this 4 x 4 matrix will represent the current piece of window showing in each square. To make input easier, the list of numbers
on each line will be delimited by a single space. - End line - A single line:
END
After the last data set, there will be a single line:
ENDOFINPUT
Note that each piece of visible window will appear only in screen areas where the window could appear when brought to the front. For instance, a 1 can only appear in the top left quadrant.
Output
THESE WINDOWS ARE CLEAN
Otherwise, the output will be a single line with the statement:
THESE WINDOWS ARE BROKEN
Sample Input
START
1 2 3 3
4 5 6 6
7 8 9 9
7 8 9 9
END
START
1 1 3 3
4 1 3 3
7 7 9 9
7 7 9 9
END
ENDOFINPUT
Sample Output
THESE WINDOWS ARE CLEAN
THESE WINDOWS ARE BROKEN
Source
代码为:
#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=5+10;
int map[maxn][maxn],in[maxn];
queue<int>Q;
vector<int>vec[maxn];
int dx[]={0,0,1,1};
int dy[]={0,1,0,1};
int topo()
{
int sum=9;
while(!Q.empty()) Q.pop();
for(int i=1;i<=9;i++)
{
if(in[i]==0)
Q.push(i);
}
while(!Q.empty())
{
int temp=Q.front();
Q.pop();
sum--;
for(int i=0;i<vec[temp].size();i++)
{
if(--in[vec[temp][i]]==0)
Q.push(vec[temp][i]);
}
}
if(sum>0) return 0;
else return 1;
}
void init()
{
char str[10];
for(int i=1;i<=9;i++)
{
vec[i].clear();
in[i]=0;
}
for(int i=1;i<=9;i++)
{
int x=(i-1)/3+1;
int y=i%3==0?
3:i%3;
for(int j=0;j<=3;j++)
{
int tx=x+dx[j];
int ty=y+dy[j];
if(map[tx][ty]!=i)
{
vec[i].push_back(map[tx][ty]);
in[map[tx][ty]]++;
}
}
}
scanf("%s",str);
}
void solve()
{
int ans=topo();
if(ans)
cout<<"THESE WINDOWS ARE CLEAN"<<endl;
else
cout<<"THESE WINDOWS ARE BROKEN"<<endl;
}
int main()
{
char str[10];
while(~scanf("%s",str))
{
if(strcmp(str,"ENDOFINPUT")==0) return 0;
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
scanf("%d",&map[i][j]);
init();
solve();
}
return 0;
}
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=5+10;
int map[maxn][maxn],in[maxn]; queue<int>Q;
vector<int>vec[maxn];
int dx[]={0,0,1,1};
int dy[]={0,1,0,1}; int topo()
{
int sum=9;
while(!Q.empty()) Q.pop();
for(int i=1;i<=9;i++)
{
if(in[i]==0)
Q.push(i);
}
while(!Q.empty())
{
int temp=Q.front();
Q.pop();
sum--;
for(int i=0;i<vec[temp].size();i++)
{
if(--in[vec[temp][i]]==0)
Q.push(vec[temp][i]);
}
}
if(sum>0) return 0;
else return 1;
} void init()
{
char str[10];
for(int i=1;i<=9;i++)
{
vec[i].clear();
in[i]=0;
}
for(int i=1;i<=9;i++)
{
int x=(i-1)/3+1;
int y=i%3==0? 3:i%3;
for(int j=0;j<=3;j++)
{
int tx=x+dx[j];
int ty=y+dy[j];
if(map[tx][ty]!=i)
{
vec[i].push_back(map[tx][ty]);
in[map[tx][ty]]++;
}
}
}
scanf("%s",str);
} void solve()
{
int ans=topo();
if(ans)
cout<<"THESE WINDOWS ARE CLEAN"<<endl;
else
cout<<"THESE WINDOWS ARE BROKEN"<<endl;
} int main()
{
char str[10];
while(~scanf("%s",str))
{
if(strcmp(str,"ENDOFINPUT")==0) return 0;
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
scanf("%d",&map[i][j]);
init();
solve();
}
return 0;
}
pojWindow Pains(拓扑排序)的更多相关文章
- POJ 2585.Window Pains 拓扑排序
Window Pains Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1888 Accepted: 944 Descr ...
- 【POJ 2585】Window Pains 拓扑排序
Description . . . and so on . . . Unfortunately, Boudreaux's computer is very unreliable and crashes ...
- POJ2585 Window Pains 拓扑排序
Window Pains Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1843 Accepted: 919 Descr ...
- POJ 2585:Window Pains(拓扑排序)
Window Pains Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2524 Accepted: 1284 Desc ...
- ACM/ICPC 之 拓扑排序范例(POJ1094-POJ2585)
两道拓扑排序问题的范例,用拓扑排序解决的实质是一个单向关系问题 POJ1094(ZOJ1060)-Sortng It All Out 题意简单,但需要考虑的地方很多,因此很容易将code写繁琐了,会给 ...
- [poj2585]Window Pains_拓扑排序
Window Pains poj-2585 题目大意:给出一个4*4的方格表,由9种数字组成.其中,每一种数字只会出现在特定的位置,后出现的数字会覆盖之前在当前方格表内出现的.询问当前给出的方格表是否 ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 有向无环图的应用—AOV网 和 拓扑排序
有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 318[Submit][Status][Di ...
随机推荐
- LOL喷子专用自动骂人工具,2018更新完整版!
软件截图 软件说明: 先进入游戏 打开程序 Z开启/C关闭 下载地址:密码 yjnm
- CAD参数绘制块引用对象(网页版)
主要用到函数说明: _DMxDrawX::DrawBlockReference 绘制块引用对象.详细说明如下: 参数 说明 DOUBLE dPosX 插入点的X坐标 DOUBLE dPosY 插入点的 ...
- java图片放大或缩小
package org.jimmy.autotranslate20181022.utils; import java.awt.Graphics; import java.awt.image.Buffe ...
- 无法完成安装:'Cannot access storage file '/
今天自己编译了spice-protocol spice-gtk spice qemu,然后想用virsh去创建一个虚机: # virsh define demo.xml 定义域 demo(从 ...
- mysql图形化工具获取表的源码
打开数据库,选择要查看的表,点击右键>对象信息>DDL:
- django显示图片
dirctory vickey_django vickey(projectname) vickey __init__.py __pycache__ settings.py urls.py wsgi.p ...
- HDFS的Java API 对文件的操作
在本次操作中所用到的命令 1.首先启动HDFS $HADOOP_HOME/sbin/start-dfs.sh 2.关防火墙 切换到root用户,执行service iptables stop 3.拷贝 ...
- [Python3网络爬虫开发实战] 4.1-使用XPath
XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言.它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索. 所以在做爬虫时,我们完全 ...
- 安装composer及切换镜像为国内镜像
一.下载composer php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 下面的 ...
- PHP:POST OR GET 请求
文章来源:http://www.cnblogs.com/hello-tl/p/7685216.html /** * 模拟提交参数,支持https提交 可用于各类api请求 * @param strin ...