• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

  • 联系
  • 订阅
  • 管理

View Post

Sicily 1443. Printer Queue 队列操作

         题意是队列中最大的优先权的元素出队,如果队首不是最大权限,就用放到队尾,题目要求的是给定的位置,计算出队的时间

        用个数组保存最大的权限,再排序,每次检测队首元素是否与数组对应位置的权限相同,如果相同,出队,否则放到队尾

 

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

struct job
{
	int priority;
	int number;
	job (int priority, int number) { this->priority = priority; this->number = number;}
	job(){}
};

bool cmp(int a, int b)
{
	return a > b;
}

int main()
{
	queue<job> q;
	int b[101];
	int cases;
	int n, m;
	int a, count, result;
	job tmp;

	cin >> cases;

	while (cases--)
	{
		count = 0;
		result = 0;
		cin >> n >> m;

		for (int i = 0; i < n; i++)
		{
			cin >> a;
			b[i] = a;
			q.push(job(a, i));
		}

		sort(b, b+n, cmp);

		while (1)
		{
			if (q.front().priority != b[count])
			{
				tmp = q.front();
				q.pop();
				q.push(tmp);
			}
			else
			{
				result++;
				count++;
				if (q.front().number == m) break;
				q.pop();
			}
		}
		cout << result << endl;
		while (!q.empty()) q.pop();
	}
	return 0;
}

posted on 2010-11-13 18:53  sysuwhj  阅读(1508)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3