cola analógico

Formación 1 - H título

La única impresora en el sindicato de estudiantes de informática está experimentando una carga de trabajo muy pesado. A veces hay un centenar de puestos de trabajo en la cola de impresión y puede que tenga que esperar durante horas para conseguir una sola página de salida. Debido a que algunos trabajos son más importantes que otros, el hacker General ha inventado y puesto en práctica un sistema de prioridad simple para la cola de trabajos de impresión. Ahora, cada puesto de trabajo se le asigna una prioridad entre 1 y 9 (con 9 siendo la prioridad más alta, y siendo 1 el más bajo), y la impresora funciona como sigue.
• El primer trabajo j en la cola se toma de la cola.
• Si hay algún trabajo en la cola con una prioridad más alta que el trabajo J, J a continuación, pasar a la final de la cola sin imprimirlo.
• De lo contrario, imprimir trabajo J (y no poner de nuevo en la cola).
De esta manera, todos los que son importantes fi n mu recetas que el pirata informático general es la impresión se imprimen muy rápidamente. Por supuesto, esos papeles molestos plazo que otros están imprimiendo pueden tener que esperar bastante tiempo para conseguir impreso, pero así es la vida. Su problema con la nueva política es que se ha vuelto muy difícil de determinar cuándo será realmente completado el trabajo de impresión. Usted decide escribir un programa para fi gurar esto. El programa se le dará la cola actual (como una lista de prioridades), así como la posición de su trabajo en la cola, y luego debe calcular cuánto tiempo se tardará hasta que se imprime su trabajo, en el supuesto de que no se añadirán nuevos puestos de trabajo a la cola. Para asuntos simplificar, suponemos que la impresión de un trabajo siempre tiene exactamente un minuto, y que añadir y eliminar trabajos de la cola es instantánea.

Entrada

Una línea con un número entero positivo: el número de casos de prueba (como máximo 100). Luego, para cada caso de prueba: • Una línea con dos enteros n y m, donde n es el número de puestos de trabajo en la cola (1 ≤ n ≤ 100) y m es la posición de su puesto de trabajo (0 ≤ m ≤ n-1) . La posición primera en la cola es el número 0, el segundo es el número 1, y así sucesivamente. • Una línea con n enteros en el rango de 1 a 9, dando a las prioridades de los trabajos de la cola. El primer número entero da la prioridad del trabajo primero, el segundo número entero la prioridad del segundo trabajo, y así sucesivamente.

Salida

Para cada caso de prueba, imprimir una línea con un solo número entero; el número de minutos hasta que su trabajo se imprime completamente, suponiendo que no hay trabajos de impresión adicionales llegarán.

Ejemplo de entrada

3 1 0 5 4 2 1 2 3 4 6 0 1 1 9 1 1 1

Ejemplo de salida

1 2 5

#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e6 + 5;
const int M = 10;//状压

struct Node
{
	int num;
	int pos;
	Node(int n, int p)
	{
		num = n;
		pos = p;
	}
};
queue<Node> a;
priority_queue<int> x;//max

int main()
{
	int cas;
	scanf("%d", &cas);
	while (cas--)
	{
		int n, m;
		int ans = 0;
		scanf("%d%d", &n, &m);
		for (int i = 0; i < n; i++)
		{
			int num;
			scanf("%d", &num);
			a.push(Node(num, i));
			x.push(num);
		}
		Node tmp(0, 0);
		while (a.size() != 0)
		{
			if (a.front().num < x.top())
			{
				tmp = a.front();
				a.pop();
				a.push(tmp);
			}
			else
			{
				ans++;
				if (a.front().pos == m)
					break;
				a.pop();
				x.pop();
			}
		}
		printf("%d\n", ans);
		while (a.size())
			a.pop();
		while (x.size())
			x.pop();
	}
	return 0;
}

Pensamiento:
la simulación n-pequeña, directo de la cola de operaciones.

Publicado 28 artículos originales · ganado elogios 0 · Vistas 335

Supongo que te gusta

Origin blog.csdn.net/xukeke12138/article/details/104627016
Recomendado
Clasificación