銀行業務佇列 oj150

親愛的張小語發表於2017-08-01

銀行業務佇列

釋出時間: 2017年7月27日 19:08   最後更新: 2017年7月27日 19:08   時間限制: 1000ms   記憶體限制: 128M

一天,小明來銀行辦業務。這個銀行有A、B兩個業務視窗,且處理業務的速度不一樣,其中A視窗處理速度是B視窗的2倍——即當A視窗每處理完2個顧客時,B視窗處理完1個顧客。給定到達銀行的顧客序列,請按業務完成的順序輸出顧客序列。假定不考慮顧客先後到達的時間間隔,並且當不同視窗同時處理完2個顧客時,A視窗顧客優先輸出。


輸入包含多組測試資料,每組輸入為一行正整數,其中第1個數字N(<=1000)為顧客總數,後面跟著N位顧客的編號。編號為奇數的顧客需要到A視窗辦理業務,為偶數的顧客則去B視窗。數字間以空格分隔。

對於每組輸入,按業務處理完成的順序輸出顧客的編號。數字間以空格分隔,但最後一個編號後不能有多餘的空格。

 複製
8 2 1 3 9 4 11 13 15
1 6
1 3 2 9 11 4 13 15
6
#include <iostream>
#include<cstdio>
#include <queue>
using namespace std;

int main() 
{
    int n;
	deque<int> a,b;
	while (cin >> n)
	{
		int num;
		for (int i = 0; i < n; i++)
		{
			scanf("%d",&num);
			if (num%2  != 0)
				a.push_back(num);
			else
				b.push_back(num);
		}
		int len = a.size() / 2<b.size() ?b.size() : a.size() / 2;
		int flag = 0;
		if (a.size() == 0)
			flag = 1;
		for (int i = 0; i < len; i++)
		{
			if (a.size()>0)
			{
				cout << a.front();
				a.pop_front();
				if (a.size() > 0)
				{
					cout << " " << a.front();
					a.pop_front();
				}
			}
			if (b.size() > 0)
			{
				if (flag)
					cout << b.front() << " ";
				else
				{
					if (a.size() > 0)
						cout << " " << b.front() << " ";
					else
						cout << " " << b.front();	
				}
				b.pop_front();
			}
		}
		cout << endl;
	}
	return 0;
}


相關文章