Консультация № 159864
07.02.2009, 16:46
0.00 руб.
0 1 1
Здравствуйте!
Пожалуйста, помогите решить 2 задачи с помощью комбинаторики...

1 Вопрос:

Волейбол:

Партия в волейболе выигрывается командой, которая первой набирает 25 очков с преимуществом минимум в два очка. В случае равного счета 24-24, игра продолжается до достижения преимущества в 2 очка (26-24; 27-25).

Две сыгранные партии, закончившиеся с одинаковым счетом, будем считать разными, если строки, в которых выписан порядок набора очков командами, не равны.

Комитет по проведению соревнований по волейболу заинтересовался, количеством различных партий, заканчивающихся счетом 25:23. Их оказалось 16123801841550.

Определить, сколько существует различных партий, заканчивающихся заданным счетом.

Входные данные:

Во входном файле INPUT.TXT указан конечный счет в партии (то есть такой, при котором победа в партии отдаётся одной из команд). Также известно, что ни одна из команд не набрала более 40 очков.

Выходные данные:

В выходной файл OUTPUT.TXT выведите количество всевозможных партий, которые заканчиваются данным счетом.

Примеры:
1.
input.txt: 25:12
output.txt: 1251677700
2.
input.txt:20:25
output.txt:1761039350070
3.
input.txt: 25:23
output.txt: 16123801841550

2 Вопрос:

Волейбол - 2


Партия в волейболе, выигрывается командой, которая первой набирает 25 очков с преимуществом минимум в два очка. В случае равного счета 24-24, игра продолжается до достижения преимущества в 2 очка (26-24; 27-25). Исключение составляет лишь пятая партия (когда счет по партиям 2:2), в этом случае счет ведется по такому же принципу, но до 15 очков, а в случае счета 14:14 игра продолжается так же до достижения преимущества в 2 очка.

Две сыгранные партии, закончившиеся с одинаковым счетом, будем считать разными, если строки, в которые вписан порядок набора очков командами, не равны.

Комитет по проведению соревнований по волейболу заинтересовало, сколько различных партий может быть, заканчивающихся со счетом 25:23, оказывается 16123801841550, далее им стало интересно, сколько же существует различных матчей в которых первая команда победила в 3 партиях со счетом 25:23 25:20 25:18, оказывается 10043105786927107686166271970998925000.

Определить, сколько существует различных матчей, заканчивающихся заданным счетом. Два матча закончившиеся одинаковым количеством партий с одинаковым счетом, считаются различными, если есть различно сыгранные партии.

Входные данные:

Во входном файле INPUT.TXT сначала записано число N - количество партий в матче. Далее следует N пар чисел, описывающих счет в каждой партии. При этом результаты партий разделяются пробелом, а счет в каждой партии отделяется двоеточием. Гарантируется, что счет в каждой партии соответствует возможному, согласно правилам волейбола, и ни в какой партии, ни одна из команд не набирает более 40 очков.

Выходные данные:

В выходной файл OUTPUT.TXT выведите количество различных матчей, которые могут оканчиваться данным счетом.

Примеры:
1.
input.txt: 3 25:23 25:20 25:18
output.txt: 10043105786927107686166271970998925000
2.
input.txt: 4 25:23 20:25 26:24 25:18
output.txt: 323866095164273521651645790930981230216140667500000

Заранее, огромное СПАСИБО!!!

Обсуждение

Неизвестный
08.02.2009, 03:26
общий
это ответ
Здравствуйте, Talan Biroev !
Решение 1й задачи. Тестировалось в MS Visual Studio 2008. На древних компиляторах типа Borland C++ 3.1 компилироваться не будет.

Приложение:
#include <fstream>
#include <string>

using namespace std;

unsigned __int64 calc(unsigned int A,unsigned int B)
{
if(B>A)swap(A,B);
unsigned __int64 coef=1UI64;
if(A>25)
{
coef<<=(A+B-48)/2-1;
A=24;
B=24;
}else A--;
unsigned __int64 p=1;
unsigned int ab=A+B,a=A,b=0;
while(a<ab)p=p*(++a)/(++b);
return p*coef;
}

int main()
{
unsigned int A,B;
ifstream in("INPUT.TXT");
ofstream out("OUTPUT.TXT");
string str,Astr,Bstr;
getline(in,str);
in.close();
unsigned int pos=str.find(':');
Astr=str.substr(0,pos);
Bstr=str.substr(pos+1);
A=atoi(Astr.c_str());
B=atoi(Bstr.c_str());
out<<calc(A,B)<<endl;
out.close();
return 0;
}
Форма ответа