stack A1051 queue A1056

本文通过两个实例展示了如何使用栈和队列解决实际问题。一是验证序列是否能通过有限容量栈得到,二是模拟淘汰赛流程确定最终排名。涉及核心算法及数据结构操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A1051

#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int arr[maxn];//保存题目给定的出栈序列 
stack<int> st;//定义栈st,用以存放int型元素 

int main()
{
	int m,n,k;
	scanf("%d%d%d",&m,&n,&k);
	while(k--)
	{
		//先把用过的栈清空 
		while(!st.empty())
		{
			st.pop();
		}
		//输入题目给定的出栈序列 
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&arr[i]);
		}
		
		int current=1;
		bool flag=true;
		
		for(int i=1;i<=n;i++)
		{
			st.push(i);//按顺序将每个元素推进去,原则上入栈的元素如果恰好等于出栈序列当前等待出栈的元素,就弹出 
			
			if(st.size()>m){//存储的元素大于容量 
				flag=false;
				break;
			}
			
			while(!st.empty()&&st.top()==arr[current])
			{
				st.pop();
				current++;
			}
		}
		if(st.empty()&&flag)//栈空并且flag==true表示合法 
		{
			printf("YES\n"); 
		}
		else{
			printf("NO\n");
		}	
	} 
	return 0;
 } 

A1056

#include<bits/stdc++.h>
using namespace std;

const int maxn=1010;
struct mouse{
	int weight;//质量 
	int rank;//排名 
}mouse[maxn];
int main()
{
	int np,ng,order;
	scanf("%d%d",&np,&ng);
	for(int i=0;i<np;i++)
	{
		scanf("%d",&mouse[i].weight);
	 } 
	queue<int> q;
	for(int i=0;i<np;i++)
	{
		scanf("%d",&order);
		q.push(order);
	}
	
	int temp=np,group;//temp为当前轮比赛的总老鼠数,group为组数
	//当队列中没有只剩下一只老鼠时 
	while(q.size()!=1){
		//计算group,即当前轮分为几组进行比赛 
		if(temp%ng==0) group=temp/ng;
		else group=temp/ng+1;
		for(int i=0;i<group;i++)
		{
			int k=q.front();
			for(int j=0;j<ng;j++)
			{
				if(i*ng+j>=temp) break;
				int front=q.front();
				if(mouse[front].weight>mouse[k].weight)
				{
					k=front;//k求出每组老鼠最大的质量 
				}
				mouse[front].rank=group+1;
				q.pop();
			 } 
			q.push(k);//把胜利的老鼠晋级,队尾进队首出 
		}
		temp=group;//总老鼠数等于总组数 
	}	
	mouse[q.front()].rank=1;
	for(int i=0;i<np;i++)
	{
		printf("%d",mouse[i].rank);
		if(i!=np-1) printf(" ");
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值