simulación límite Weekly6-

A - Grasping magia Tokai II

título

Dios de las cartas de juego suizos de vuelta a casa, las cosas amarga experiencia, decidió practicar la tecnología de tarjetas duro, y con el tiempo se convirtió en un Dios de jugadores!
A × B cosas allí jugando a las cartas. Cada tarjeta de juego tiene un tamaño (un entero, denotado por A, el rango es de 0 a la sección A - 1) y un color (entero, denotado es B, el intervalo de rango es de 0 a B - 1.
tarjetas son diferentes entre sí, y es único, que no hay dos cartas son del mismo tamaño y color.
significa "mano" que sus manos son cinco cartas diferentes, cinco cartas no hay cuestiones de orden después de que el ex quién es quién, pueden formar un tipo de tarjeta. definimos nueve tipo de tarjeta, tipo de tarjeta que son nueve tipos de reglas, utilizamos "número baja prioridad" para que coincida con el tipo de tarjeta, es decir, que la "mano" de arriba a abajo de los primeros en cumplir con el una regla de tipo tarjeta es su "número de tipo de marca" (un entero que pertenece 1-9):

Ras: cumple con la Regla 5 y la Regla 4.
bomba: 5 cartas, que es igual a cuatro tarjeta de tamaño.
Tres Zonas II: 5 cartas que es igual a tres tamaños de tarjetas, y, además, dos tamaño de la tarjeta son iguales.
ras: 5 cartas son del mismo palo.
recta: 5 cartas del tamaño de la forma x, x + 1, x + 2, x + 3, x + 4
tres: cinco cartas incluyendo la tarjeta 3 igual tamaño.
dos pares: 5 Tarjetas que es igual al tamaño de dos tarjetas, tres tarjetas y las otras dos cartas de igual tamaño.
un par:. 5 cartas que es igual al tamaño de dos tarjetas
para proporcionar: esta mano el tipo de tarjeta no satisface cualquiera.
ahora, dos cosas lejos de las tarjetas en el naipe a × B! Son (a1, b1) y (a2, b2). (Donde A representa una magnitud, b representa color)
El resto de las cartas de juego de azar a cabo 3! La composición de la mano! !
De hecho, además de la materia (un código de número entero que va a estar jugando, de aficionados que era un mago, y ahora quiere predecir la probabilidad de su futuro, a saber, la posibilidad de que él conseguirá la "mano", utilizamos un "número de tipo tarjeta perteneciente 1-9) "para representar la mano del tipo de tarjeta, a continuación, sus nueve futuro posible, pero cada número de posibles soluciones no es lo mismo.
Ahora, motocicleta Hace materia Eye se ha ido, que necesita para ayudarle a hacer los cálculos nueve clases de tipo de tarjeta, el número de programa de cada tipo de tarjeta.

Entrada

Línea 1 contiene los enteros A y B (5 ≤ A ≤ 25, 1 ≤ B ≤ 4).

Línea 2 contiene los enteros a1, b1, a2, b2 (0 ≤ a1, a2 ≤ A - 1, 0 ≤ b1, b2 ≤ B - 1, (a1, b1) ≠ (a2, b2)).

Salida

línea de salida, esta línea tiene nueve números enteros, cada número entero representa el número nueve tipo de tarjeta de programa (por números de tipo tarjeta en orden ascendente)

Ejemplos

Input
5 2
1 0 3 1
Output
0 0 0 0 8 0 12 36 0
Input
25 4
0 0 24 3
Output
0 2 18 0 0 644 1656 36432 113344

pensamiento

  • En primer lugar, de acuerdo con el color y el tamaño de las tarjetas y dado dos cartas extraídas mediante la enumeración de todos los posibles (a triple circuito) de tres tarjetas
  • Fueron juzgados cada posible tipo de tarjeta, tipo de tarjeta de atención prioritaria:
    • Flush / escalera / color: Ordenar determinar si se incrementa la tarjeta, y luego determinar si el mismo palo
    • El tipo restante tarjeta: el número de la grabación digital diferente por un traje de tarjetas de matriz, y el mismo ciclo se determina 2/3/4 número de tarjeta, tipo de tarjeta se puede determinar

resumen

  • El problema principal es tomar la marca, no quitar tarjetas duplicadas
  • Tenga en cuenta que después de cada determinación de finalización, la condición de determinación vaciar
  • Después de cada determinación, pai [1] y pai [2] necesidades reasignados (con el fin de cambiar su valor original)

código de implementación

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

struct p{
	int num;
	int hua;
	bool operator <(const p &a)
	{
		if(num!=a.num) return (num<a.num);
		else return (hua<a.hua);
	}
}pai[6];

p tpai[105];
int res[10],n,h,tol=0;
int suit[26];
bool Flush=false;
bool same=false;
int four=0;
int three=0;
int tpair=0;
int a1,a2,b1,b2;

int main()
{
	cin>>n>>h;
	cin>>a1>>b1>>a2>>b2;
	pai[1].num=a1;
	pai[1].hua=b1;
	pai[2].num=a2;
	pai[2].hua=b2;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<h;j++)
		{
			if((i==pai[1].num && j==pai[1].hua)||(i==pai[2].num && j==pai[2].hua))
				continue;
			else
			{
				tpai[tol].num=i;
				tpai[tol].hua=j;
				tol++;
			}
		}
	}
	for(int i=0;i<tol;i++)//枚举时,第四张牌在第三张牌后面,第五张牌在第四张后面
	{
		for(int j=i+1;j<tol;j++)
		{
			for(int k=j+1;k<tol;k++)
			{
				pai[1].num=a1;
				pai[1].hua=b1;
				pai[2].num=a2;
				pai[2].hua=b2;
				pai[3]=tpai[i];
				pai[4]=tpai[j];
				pai[5]=tpai[k];	
				for(int x=0;x<26;x++)
					suit[x]=0;
				for(int x=1;x<=5;x++)
				{
					suit[pai[x].num]++;
				}
				sort(pai+1,pai+6); 
				if(pai[2].num==pai[1].num+1 && pai[3].num==pai[1].num+2 && pai[4].num==pai[1].num+3  && pai[5].num==pai[1].num+4)
					Flush=true;	
				if(pai[2].hua==pai[1].hua && pai[3].hua==pai[1].hua && pai[4].hua==pai[1].hua  && pai[5].hua==pai[1].hua)
					same=true;
				for(int x=0;x<n;x++)
				{
					if(suit[x]==2) tpair++;
					if(suit[x]==3) three++;
					if(suit[x]==4) four++;
				}
				if(Flush==true&&same==true) res[0]++;
				else if(four==1) res[1]++;
				else if(three==1&&tpair==1) res[2]++;
				else if(same==true) res[3]++;
				else if(Flush==true&&same==false) res[4]++;
				else if(three==1) res[5]++;
				else if(tpair==2) res[6]++;
				else if(tpair==1) res[7]++;
				else res[8]++;
				same=false;Flush=false;four=0;three=0;tpair=0;//清空!!!
			}
		}
	}
	for(int i=0;i<9;i++)
	{
		cout<<res[i]<<" ";
	}
	
	return 0;
}
Liberadas nueve artículos originales · ganado elogios 0 · Vistas 163

Supongo que te gusta

Origin blog.csdn.net/weixin_43793842/article/details/105284061
Recomendado
Clasificación