酷暑一夏1

不忘初心,方得始终


Vijos1219 拉面之窗 题解

题目

为了高效地管理拉面店,Dennis给拉面店配了台电脑……
在一个春暖花开, 阳光明媚的上午, Dennis兴致勃勃地来到自己的拉面馆视察工作,突然他发现大徒弟光光在电脑上做Vijos的题目(原来拉面店里也卧虎藏龙),但光光总是开了一个题目看了一半,又马上打开另一个看看(难道题目太easy了,不屑于做?)。一会儿,桌面上出现了很多网页窗口,后来他有些题目看了一半不看了,过了一会儿又想再看看,于是产生了一个问题,这么多窗口,每次用鼠标点,还并不一定一次就点得到想要的窗口呢!于是他想让乐于助人的Dennis来写一个程序,解决他的困扰。可Dennis太忙了,只好由你代劳了。光光的要求是这样的:
给定$n$条指令($n \le 100$);每条指令可能有下列四种情况;
1>新开一个窗口;
2>鼠标点击一个坐标;
3>关闭一个窗口;
4>拖动一个窗口;
请你告诉他通过这些指令,最后显示在桌面上最上面的那个窗口,如果此时桌上没有任何窗口,则输出Nothing。注:窗口是矩形(废话)。

题解

用数组记录各个窗口的坐标,并用下标代表窗口层次,按照要求进行模拟就好辣~

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//Author: ksyx
#include<cstdio>
const int MAXN=100+5;
const int MAXL=5+5;
int pos[MAXN][4],totwin,x1,y1,x2,y2,n;char op[MAXL];
void OrderChange(int src,int targ)
{
for(int i=0;i<4;i++)
pos[targ][i]=pos[src][i];
}
int FindWindow(int x,int y)
{
for(int i=1;i<=totwin;i++)
if(x>=pos[i][0] && y>=pos[i][1] && x<=pos[i][2] && y<=pos[i][3])
return i;
return 0;
}
void SetValue()
{
pos[1][0]=x1;pos[1][1]=y1;pos[1][2]=x2;pos[1][3]=y2;
}
int main()
{
int targ;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",op);
if(op[2]=='e')
{
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
for(int i=totwin;i>=1;i--)
OrderChange(i,i+1);
SetValue();
totwin++;
}
if(op[2]=='i')
{
scanf("%d %d",&x1,&y1);
targ=FindWindow(x1,y1);
if(!targ) continue;
x1=pos[targ][0];y1=pos[targ][1];x2=pos[targ][2];y2=pos[targ][3];
for(int i=targ-1;i>=1;i--)
OrderChange(i,i+1);
SetValue();
}
if(op[2]=='o')
{
scanf("%d %d",&x1,&y1);
targ=FindWindow(x1,y1);
if(!targ) continue;
for(int i=targ+1;i<=totwin;i++)
OrderChange(i,i-1);
totwin--;
}
if(op[2]=='v')
{
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
targ=FindWindow(x1,y1);
pos[targ][0]+=x2;pos[targ][1]+=y2;pos[targ][2]+=x2;pos[targ][3]+=y2;
x1=pos[targ][0];y1=pos[targ][1];x2=pos[targ][2];y2=pos[targ][3];
for(int i=targ-1;i>=1;i--)
OrderChange(i,i+1);
SetValue();
}
}
if(!totwin) printf("Nothing"); else {for(int i=0;i<4;i++) printf("%d ",pos[1][i]);}
return 0;
}
最近的文章

Vijos1415 生命游戏 题解

题目生命游戏(Game of life)由英国数学家John Conway在1970年发明。事实上,它是一个“零人游戏”,也没有胜负之分,而是相当于一个确定性自动机。游戏在N×M的细胞组成的矩阵里进行,每个细胞每个时刻的状态可能是“存活”或者“休眠”两种,细胞矩阵的状态会按以下规则进行演化:一个存活 …

于  Vijos 继续阅读
更早的文章

CodeVS1165 字符串的展开 题解

题目在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参 …

于  CodeVS, NOIP, 提高组 继续阅读