[蓝 桥 杯] [Décima pregunta real de 2019] ----- Prioridad de la tienda para llevar

Descripción del Título:

Hay N tiendas de comida para llevar mantenidas en el sistema de comida para llevar "¿Está lleno?", Numeradas 1 ∼ N. Cada tienda de comida para llevar tiene una prioridad, y la prioridad es 0 al principio (en el momento 0).
Después de cada unidad de tiempo, si la tienda de comida para llevar no tiene pedido, la prioridad se reducirá en 1 y la más baja se reducirá a 0; si la tienda de comida para llevar tiene un pedido, la prioridad no disminuirá sino que aumentará, y la prioridad será aumentar en 2 por cada pedido.
Si la prioridad de un restaurante de comida para llevar es mayor que 5 en un momento determinado, el sistema lo agregará a la caché de prioridad; si la prioridad es menor o igual a 3, se borrará de la caché de prioridad.
Dadas las M piezas de información del pedido en el tiempo T, calcule cuántas tiendas de comida para llevar hay en la caché de prioridad en el momento T.

ingresar:

La primera línea contiene 3 números enteros N, M y T.
Cada línea de las siguientes M líneas contiene dos números enteros ts e id, lo que indica que la tienda de comida para llevar con el número id en el momento ts recibió
un pedido.

Producción:

Genere un número entero para representar la respuesta.

Ideas:

La idea inicial es: atravesar desde el tiempo 1 hasta el punto con el mayor tiempo, y juzgar en cada punto si hay una orden en el momento actual. Si hay una orden, la prioridad se incrementará en 2, y las demás se reducirá en uno y aumentará a 5. Cuando el número de áreas de búfer prioritarias aumenta en uno, cuando no hay orden en un momento determinado y la prioridad es 4, significa que menos uno es menor o igual a 3. En este momento, se sale del área de búfer prioritaria. Parece estar bien, pero una cosa se pasa por alto: puede haber pedidos de varias tiendas al mismo tiempo . Luego agregue una capa de bucle para detener el tiempo directamente.
Así que cambié mi forma de pensar :
------ Use una matriz f para marcar si la tienda de comida para llevar actual tiene pedidos, y luego use una matriz v para marcar si la tienda ha agregado prioridad antes, y abra un bidimensional matriz para almacenar iy sacar en el momento j Si hay pedidos en la tienda, el número de pedidos en un momento determinado es incierto, así que use la matriz vectorial directamente.
------ Primero recorra cada punto de tiempo y luego recorra el orden en el punto de tiempo actual en cada punto de tiempo. Si hay una prioridad de orden, agregue 2 y la matriz f se marca como 1, lo que significa que hay un orden en el punto de tiempo actual;
- ---- Ir a las tiendas de comida para llevar de 1-n, si la prioridad no es 0 y la matriz f no está marcada, la prioridad se reduce en 1; si la prioridad es mayor que 5 y el búfer de prioridad no se ha agregado, el número de prioridad se incrementa en 1, Al mismo tiempo, la matriz v se marca como 1, si la prioridad es menor o igual a 3 y se ha agregado el búfer de prioridad, el número de prioridad se reduce en 1 y la matriz v se marca como 0.

Código:

#include <iostream>
using namespace std;
#include <vector>
#include <cstring>
int ans[100005];
int f[100005];//当前店是否有订单 
int v[100005];//之前是否加入过优先级 
vector<int> a[100005];

int main()
{
    
    
	int n,m,t,ts,id;
	cin>>n>>m>>t;
		
	for(int i=0;i<m;i++)
	{
    
    
		cin>>ts>>id;
		a[ts].push_back(id);//ts时刻id号店有订单 
	}

	int cnt=0;
	for(int i=1;i<=t;i++)//遍历每个时间点
	{
    
    
		memset(f,0,sizeof(f));
		for(int j=0;j<a[i].size();j++)
		{
    
    
			ans[a[i][j]]+=2;
			f[a[i][j]]=1;
		}
		for(int j=1;j<=n;j++)
		{
    
    
			if(f[j]!=1&&ans[j]!=0) 
				ans[j]--;
            if(ans[j]>5&&!v[j])//当前点的优先级大于5且之前没有加入过缓冲 
			{
    
    
                cnt++;
                v[j]=1;
            }
            if(ans[j]<=3&&v[j])//当前点的优先级小于等于3且之前加入过缓冲
			{
    
    
                v[j]=0;
                cnt--;
            }
		}				
	} 
	cout<<cnt<<endl;
	
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45102820/article/details/113569191
Recomendado
Clasificación