Juego de rompecabezas (similar a las carreras de caballos Tian Ji)

describir

Los estudiantes C y S están jugando juntos a un juego de puntos. Hay una pila de cartas blancas y una pila de cartas azules, cada una con un número entero de puntos escritos en ella. C saca al azar n cartas blancas, S saca al azar n cartas azules y realizan n rondas de ortografía, cada uno de ellos saca una carta cada vez, el que tenga la puntuación más alta obtendrá tres chocolates y el que tenga la puntuación menor obtiene un chocolate, si los puntos son los mismos, cada persona obtendrá dos chocolates y las tarjetas usadas no se pueden reutilizar. Conociendo los puntos de la tarjeta obtenidos por C y S , programe para calcular el número máximo y mínimo de chocolates que S puede obtener.

ingresar

La entrada contiene varios conjuntos de datos de prueba.
La primera línea de cada conjunto de datos de prueba es un número entero n (1<=n<=1000) , la siguiente línea son n números enteros, que indican los puntos de la tarjeta blanca dibujada por C , y la siguiente línea también son n números enteros, indicando S Los puntos de la carta azul extraída. La entrada termina con un 0 .

producción

Para cada conjunto de datos, genera una línea, el contenido son dos números enteros separados por espacios, que representan respectivamente el número máximo y mínimo de chocolates que S puede obtener.

entrada de muestra

3

92 83 71

95 87 74

2

20 20

20 20

2

20 19

22 18

0

salida de muestra

9 5

4 4

4 4

analizar:

Esta pregunta es muy similar al problema de las carreras de caballos de Tian Ji ,  y la idea esencial es si lo mejor de mí no es tan bueno como el tuyo entonces lo peor de mí es mejor que lo mejor de ti y lo mejor de mí es mejor que lo mejor que te sigue

        (1) Si la tarjeta de alto valor de B puede ganar la tarjeta de alto valor de A , entonces compare , de lo contrario ejecute (2) ;         (2) Si la tarjeta de poco valor de B puede ganar la tarjeta de poco valor de A tarjeta , luego compare , de lo contrario ejecute (3)) ;         (3) Si el tablero de números pequeños de B puede empatar el tablero de números grandes de A , luego compare , de lo contrario realice (4) ;         (4) compare los tableros de números pequeños de B tablero de números con A


Se compara la tarjeta de punto alto de la tarjeta;

Código central:

//拼点游戏(类似于田忌赛马) 
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int c[1010];
int s[1010];
int solve(int *s,int *c,int n)
{
	int i=1;
	int j=1;
	int p=n;
	int q=n;
	int max=0;
	while(i<=p&&j<=q)
	{
		if(s[p]>c[q])//如果s的大点数能比过c的大点数,就比 
		{
			max+=3;
			p--;
			q--;
		}
		else if(s[i]>c[j])//如果s的大点数比不过c的大点数,那就用s的小点数和c的小点数比较,能比过就比 
		{
			max+=3;
			i++;
			j++;
		}
		else if(s[i]==c[q])//如果以上都比不过,那就用s的小点数和c的大点数去比,能平的话就比 
		{
			max+=2;
			i++;
			q--;
		}
		else//如果既比不过,也无法拿s的小点数去平c的大点数,那就用s的小点数去消耗掉c的大点数 
		{
			max++;
			i++;
			q--;
		} 
	}
	return max;
}
int main()
{
	int n;
	while(cin>>n&&n)
	{
		memset(c,0,sizeof(c));
		memset(s,0,sizeof(s));
		int max=0;
		int min=0;
		for(int i=1;i<=n;i++)
		cin>>c[i];
		for(int i=1;i<=n;i++)
		cin>>s[i];
		sort(s+1,s+n+1);
		sort(c+1,c+n+1); 
		max=solve(s,c,n);//找出s的最大值 
		min=4*n-solve(c,s,n);//每一局总分是4分,找出c的最大值,用总分减去c的最大值就是s的最小值 
		cout<<max<<" "<<min<<endl;
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/m0_51769031/article/details/125649529
Recomendado
Clasificación