2021年暑期训练阶段一Day1

本文介绍了数据结构中的栈、队列、优先队列的应用,包括逆波兰表达式计算、循环调度模拟、少林寺和尚战斗匹配、序列求和问题、药剂选择策略以及能量立方体交易等实例,通过代码实现详细解析各种数据结构的使用。
摘要由CSDN通过智能技术生成

栈、队列、优先队列、双端队列、map容器的使用

目录

A - Stack

B - Queue

C - Shaolin

D - Equal Sums

E - Potions (Hard Version)

F - Buy and Resell

G - 度度熊学队列


A - Stack

题意:

使用逆波兰式的输入计算得出结果

如:1 2 + 3 4 -  * 等于(1+2)*(3-4)= -3

思路:

使用栈,注意把字符转换为数字。

代码:

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<stack>
using namespace std;
int main ()
{
	string s;
	stack<int> A;
	int a,b;
	while(cin>>s){
		if(s[0]=='+'){
			a=A.top();
			A.pop();
			b=A.top();
			A.pop();
			A.push(a+b);
		}
		else if(s[0]=='-'){
			a=A.top();
			A.pop();
			b=A.top();
			A.pop();
			A.push(b-a);
		}
		else if(s[0]=='*'){
			a=A.top();
			A.pop();
			b=A.top();
			A.pop();
			A.push(a*b);
		}
		else {
			A.push(atoi(s.c_str())); //字符转换为数字
		}
	}
	cout<<A.top()<<endl;
	return 0;

}

B - Queue

题意:

一个队列中有n个进程。每个进程都有namei和timei。循环调度按顺序处理进程。每个进程进行q毫秒,如果该进程尚未完成,则中断该进程。并移动到队列的末尾,然后调度程序处理队列中的下一个进程。编写一个模拟循环调度的程序。

思路:

使用队列模拟过程

代码:

​
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;

int main()
{
    int n,q,time;
    string name;
    queue<pair<string,int> >qu;  //使用pair代替结构体
    cin>>n>>q;
    for(int i=0;i<n;i++)
    {
        cin>>name>>time;
        qu.push(make_pair(name,time));
    }
    pair<string,int> pa;
    int sum=0,x;
    while(!qu.empty())
    {
        pa=qu.front();
        qu.pop();
        x=min(pa.second,q);  //取一个时间片和当前进程花费时间的最小值
        pa.second-=x;
        sum+=x;
        if(pa.second>0)  //未结束
        {
            qu.push(pa);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值