Aleatórios Teams ------ ganancioso

n participantes da competição foram divididos em equipes m de alguma maneira para que cada equipe tem pelo menos um participante. Após a competição cada par de participantes da mesma equipe se tornaram amigos.

Sua tarefa é escrever um programa que vai encontrar o número máximo de pares de amigos que poderiam ter se formado até o final da competição e mínimo.

Entrada
A única linha de entrada contém dois números inteiros n e m, separados por um único espaço (1 ≤ m ≤ n ≤ 109) - o número de participantes e o número de equipas respectivamente.

Saída
A única linha da saída deve conter dois inteiros kmin e Kmax - o número mínimo possível de pares de amigos e o número máximo possível de pares de amigos respectivamente.

Exemplos
de entrada
5 1
de saída
10 10

Entrada
3 2
Saída
1 1

Entrada
6 3
de saída
3 6

Nota
Na primeira amostra todos os participantes entrar em uma equipe, de modo que haverá pares exatamente dez de amigos.

No segundo exemplo a qualquer possível equipe arranjo um sempre terá dois participantes e a outra equipe terá sempre um participante. Assim, o número de pares de amigos será sempre igual a um.

No terceiro número mínimo amostra de amizade recém-formados podem ser alcançados se participantes foram divididos em equipas constituídos por 2 pessoas, número máximo pode ser alcançado se participantes foram divididos em grupos de 1, 1 e 4 pessoas.

O significado de problemas

n m indivíduo atribuído a uma equipe, cada companheiros de equipe que irá tornar-se bons amigos, bons amigos até, pelo menos perguntar quantos são, respectivamente

idéias de solução de problemas

Outset também carece de ideias, eles suspeitam que vários casos, encontrou-se vários conjuntos de dados testado e está concentrada em uma equipe de homem, outras equipes colocar uma pessoa um bom amigo neste caso até um logarítmica, se cada equipe compartilhando as palavras do número mínimo de
ponto sujeito a erros:
Observe que o intervalo de dados a longa longa
olhada é o primeiro ou o primeiro de saída de saída max min, eu engana para trás ... este erro estúpido Eu só vai fazê-lo, wa do vários cabelo

implementação de código

#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
	long long n, m, max = 0, min = 0;
	cin >> n >> m;
	if (m == 1)//一队的话最大值最小值相等
	{
		max = n * (n - 1) / 2;
		cout << max << " " << max << endl;
		return 0;
	}
	else
	{
		long long t = n - m + 1,x = n / m, y = n % m;
		max = t * (t - 1) / 2;
		min = (m - y) * x*(x-1)/2 + y * x*(x+1)/2;
		cout << min << " " << max << endl;
	}
	return 0;
}

Codeword não é fácil, como se deixar uma
louvável delegado, entregar uma fragrância ~

Publicado 26 artigos originais · ganhou elogios 30 · vista 2419

Acho que você gosta

Origin blog.csdn.net/SDAU_LGX/article/details/104931041
Recomendado
Clasificación