El miedo a la teoría y la práctica de la operación [programación] Un DDL de Week4

Descripción Asunto:

ZJM hay n puestos de trabajo, cada trabajo tiene su propia DDL, si ZJM no se ha hecho el trabajo antes de que el DDL, entonces el maestro deducirá este trabajo todos los puntos habituales.
Así ZJM quieren saber cómo organizar el orden de las tareas a ceder un poco menos puntos como sea posible.

Formatos de entrada:

Entrada de prueba de la t. La primera línea de entrada es un único entero T, se encontró en el número de casos de prueba.
Cada caso de prueba para comenzar un número entero positivo N (1 <= N <= 1000), indica el número de puestos de trabajo.
A continuación, dos líneas. La primera línea contiene N enteros que representan el DDL, la siguiente fila que contiene N números enteros que representan puntos de la hebilla.

Ejemplo de entrada:

3
3
3 3 3
10 5 1
3
1 3 1
6 2 3
7
1 4 6 4 2 4 3
3 2 1 7 6 5 4

Los formatos de salida:

Para cada caso de prueba, la salida debe disminuir la puntuación mínima total, cada línea de la prueba.

Salida de muestra:

0
3
5

Descripción de la muestra:

Hay tres conjuntos de ejemplos anteriores.
Para el primer conjunto de muestras, hay tres puestos de trabajo DDL su tercer día, ZJM no todo se hace en tan sólo un día antes de la DDL, por lo que no hay puntos, 0 es la salida.
Para el segundo conjunto de la muestra, hay tres puestos de trabajo, que son DDL el primer día, el tercer día, el primer día. ZJM hizo en el primer día de trabajo, un segundo trabajo al día siguiente, un total de 3 puntos deducidos, la salida 3.

ideas:

Para los puntos de hebilla mínimos, en lo posible, porque una fracción relativamente grande de trabajo seleccionado antes de hacer DDL. Por lo tanto, el trabajo será de entrada por DDL orden descendente puntuación descendente, después de la última salida del día para organizar un trabajo, el DDL en el último día de trabajo a presión en la cola de prioridad, la decisión de las puntuaciones de prioridad tamaño, si la cola no está vacía, la puntuación máxima que es la más alta prioridad de las disposiciones operativas del día, después del paso del día anterior, y DDL trabajo del día también empujaron cola hacia adelante hasta que haya arreglado todo el día. Por último, todavía en la cola de trabajos es el trabajo sin terminar, se suman sus puntuaciones, que se va a puntos deducidos.

código:

#include <iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int size=1e6+5; 
struct ddl{
	int date;
	int score;
	bool operator<(const ddl&b)const
	{
		return score<b.score;
	}
};
ddl d[size];
bool cmp(ddl&a,ddl&b)
{
	return a.date!=b.date?a.date>b.date:a.score>b.score;
}
priority_queue<ddl>qq;
int main(int argc, char** argv) {
	int N;
	cin>>N;
	for(int ii=0;ii<N;ii++)
	{
		int n;
		cin>>n;
		for(int i=0;i<n;i++)
		{
			cin>>d[i].date;
		}
		for(int i=0;i<n;i++)
		{
			cin>>d[i].score;
		}
		sort(d,d+n,cmp);
		int last=d[0].date;
		int i=0;
		while(last>0)
		{
			for(;i<n&&d[i].date==last;i++) qq.push(d[i]);
			if(!qq.empty())
			{
				qq.pop();
			}
			last--;
		}
		int count=0;
		while(!qq.empty())
		{
			count+=qq.top().score;
			qq.pop();
		}
		cout<<count<<endl;
	}
	
	return 0;
}
Publicado 25 artículos originales · ganado elogios 8 · visitas 535

Supongo que te gusta

Origin blog.csdn.net/weixin_44034698/article/details/104874140
Recomendado
Clasificación