S&Q

Posted WShit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了S&Q相关的知识,希望对你有一定的参考价值。

1.学习总结

2.PTA实验作业

2.1 题目 : 报数游戏

2.1 解题思路

输入 n , m    //总人数和退圈数
if  m>n
    Error
    结束程序
end
定义队列 Numoff , 将n个人入队
int i= 1    //报数
while  Numoff.size()!=0  do
    if( i%=m )
        then  将队首放到队尾
        else  输出本轮退圈的人的编号 , Numoff.pop()
    end
    i++   
end

2.1 代码截图

2.1 PTA提交列表

2.2 题目 : 列车厢调度

2.2 设计思路

定义栈S3储存3号轨道
定义队列S1
while  S1.size()  do
    if  3号轨道最外面的车厢符合进道顺序
        将其移向2号轨道
        continue
    end
    if  1号轨道最外面的车厢符合进道顺序
        then  将其移向2号轨道
        else  将其移向3号轨道
    end
end
while  S3.size()  do
    if  3号轨道最外面的车厢符合进道顺序
        then  将其移向2号轨道
        else  Error , 结束程序
    end
end

2.2 代码截图


2.2 PTA提交列表

2.3 题目 : 银行排队问题之单队列多窗口加VIP服务

2.3 解题思路

定义结构体Bank存放客户信息
定义栈All存放所有客户 , VIP额外存放vip客户 
输入n 	//客户总数
for i=1 to n do
	输入客户i的信息,All.push
	如果客户i是vip
		VIP.push
end
while  !All.empty()  do
	先判断是否有vip可进入vip窗口
		有则将该vip出队,改变vip窗口空闲时间 
		continue
	如果All.front()是vip && All的队首和VIP的队首不是同一个人
		All.pop()	//该客户之前已经出队
		continue
	for win=0 to sum-1 do	//遍历窗口 
		如果该窗口是vip窗口,且此时也有vip在等待
			continue	//让位
		如果win号窗口空闲
			进入该窗口 , break
		如果该窗口等待时间最短 
			标记该窗口 
	end
	if win==sum	//完全遍历,没有发现空闲窗口
		进入标记的窗口
end

2.3 代码截图


2.3 PTA提交列表

3.截图本周题目集的PTA最后排名

3.1 栈PTA排名

3.2 队列PTA排名

3.3我的总分: 340

4.阅读代码

题目 :
Rocky山脉有n个山峰,,从西向东依次编号为1, 2, 3, ……, n。编号为i的山峰高度为hi。小修从西往东登山。
每到一座山峰,她就回头观望。在第i座山峰,她记录下自己回头能看到的山峰数si。
小修把所有的si加起来得到S作为她此次旅行快乐值。你能计算出小修的快乐值吗?
代码 :
#include<bits/stdc++.h>
using namespace std;
int main(){
	stack <int> h;
	int n , val = 0 ;
	cin >> n;
	while( n-- ){
		int hi;
		cin >> hi ;
		val += h.size();
		while( h.size() && h.top() < hi )
			h.pop();
		h.push( hi );
	}
	cout << val << endl;
	return 0;
}

出处 : http://www.codevs.cn/problem/1531/
该代码利用栈求解.通过栈的后入先出删除前面的低于这座山(会被挡住)的山峰,并用队列的长度表示回头能看到的山峰数

以上是关于S&Q的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 - Golang 实现集合操作

拥有的50个CSS代码片段(上)

KMP模版 && KMP求子串在主串出现的次数模版

HustOJ - 1009

Spfa + SLF&LLL优化

单调栈 & 单调队列