• 算法与数据结构第四次作业——队列


    算法与数据结构实验题 4.15 OJ 队列

    ★实验任务

    设某 OJ 有 A、B 两个评测窗口,且处理业务的速度不一样,其中 A 窗口评测的速度是B 窗口的 2 倍 —— 即当 A 窗口每评测完 2 份代码时,B 窗口评测完 1 份代码。给定评测代码序列,请按 judge 完成的顺序输出代码序列。假定不考虑每份代码先后提交的时间间隔,并且当不同窗口同时处理完 2 份代码时,A 窗口代码编号优先输出,假设提交的代码没有优劣之分。

    ★数据输入

    输入为一行正整数,其中第 1 个数字 N(≤1000)为顾客总数。

    下一行为 N 份代码的编号。编号为奇数的代码需要到 A 窗口进行评测,为偶数的代码则去 B 窗口。数字间以空格分隔。

    ★数据输出

    按业务处理完成的顺序输出代码的编号。数字间以空格分隔,但最后一个编号后不能有多余的空格。

    输入示例

    8
    2 1 3 9 4 11 12 15
    

    输出示例

    1 3 2 9 11 4 15 12
    

    ★hint

    输入示例中,由于不考虑代码先后提交的时间间隔,即 编号为 2 的代码放入 B 窗口,当 2 编号的代码评测结束时,编号为 1、3 的代码也在 A 窗口评测结束,之后优先输出 A 窗口的代码。

    #include<iostream>
    #include<queue>
    using namespace std;
    int main()
    {
    	int n,num;
    	cin >> n;
    	queue<int> A, B;
    	for (int i = 0; i < n; i++)
    	{
    		cin >> num;
    		if (num % 2 == 0)
    		{
    			B.push(num);
    		}
    		else
    		{
    			A.push(num);
    		}
    	}
    	int count = 0;
    	while (!A.empty() && !B.empty())
    	{
    		cout << A.front();
    		A.pop();
    		count++;
    		if (!A.empty()||!B.empty()) cout << ' ';
    		if (count == 2)
    		{
    			cout << B.front();
    			B.pop();
    			if (!B.empty()||!A.empty()) 
    				cout << ' ';
    			count = 0;
    		}
    	}
    	while (!A.empty())
    	{
    		cout << A.front();
    		A.pop();
    		if (!A.empty()) cout << ' ';
    	}
    	while (!B.empty())
    	{
    		cout << B.front();
    		B.pop();
    		if (!B.empty())
    		{
    			cout << ' ';
    		}
    	}
    }
    

    算法与数据结构实验题 4.8 干净的序列

    ★实验任务

    有一个长度为 n 的序列,第 i 个的数为 a[i]。我们定义如果它的一个连续的子串为“没有进行过干净的交易”,那么这个子串的最大值与最小值之差在[m,k]中。

    现在,你的任务是找到一条最长的“没有进行过干净的交易”的子串。

    ★数据输入

    第一行输入三个正整数 n m k (0<n<=10000),m(0 =< m =< k =< n)。

    接下去一行有 n 个正整数,第 i 个数表示 a[i]的值。

    ★数据输出

    输出一个数,表示这个子串的长度。

    输入示例1

    5 0 0
    1 1 1 1 1
    

    输出示例1

    5
    

    输入示例2

    6 0 3
    3 1 2 3 4 5
    

    输出示例2

    5
    

    很暴力的一种方法,用双循环遍历所有字串,找出最大的符合条件的字串

    #include<iostream>
    #include<queue>
    using namespace std;
    int main()
    {
    	int n, m, k;
    	cin >> n >> m >> k;
    	int* a = new int[n];
    	for (int i = 0; i < n; i++)
    	{
    		cin >> a[i];
    	}
    	int max, min, sum=0, temp,diff;
    	queue<int> b;
    	for (int i = 0; i < n; i++)
    	{
    		min = max = a[i];
    		for (int j = i + 1; j < n; j++)
    		{
    			if (a[j] > max)
    			{
    				max = a[j];
    			}
    			else if (a[j] < min)
    			{
    				min = a[j];
    			}
    			diff = max - min;
                if(diff>k) break;
                if(diff<m) continue;
    			if (diff >= m && diff <= k)
    			{
    				temp= j - i + 1;
    				if (temp > sum) sum = temp;
    			}
    		}
    	}
    	cout << sum;
    }
    
    
  • 相关阅读:
    p2394 精度题
    线性筛素数
    poj3468 线段树的懒惰标记
    逆元
    2018 Multi-University Training Contest 2
    2018 Multi-University Training Contest 1
    判断素数遇到的问题
    Mergeable Stack(链表实现栈)
    组合数
    poj2594 机器人寻找宝藏(最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/wangmou-233-1024-com/p/13767252.html
Copyright © 2020-2023  润新知