Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 20

Определить, сколько существует различных раскрасок полоски из N клеток

25.03.2014, 16:56. Показов 1588. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решаю задачу условие на картинке, написал код идею вроде понял, не могу понять почему проходит лишь на частичный балл, помогите разобраться,

Мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <cstdio>
#include <cassert>
#include <cmath>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
 
using namespace std;
 
long long MOD = 1e9+7;
 
 
long long fact (int n)
{
 
    long long res = 1;
 
    for (int i = 2; i <= n; i++)
        res = (res*i) % MOD;
 
    return res;
}
 
int main()
{
   int n,a,b,c,sum;
 
 
    cin >> n >> a >> b >> c;
 
    sum = a + b + c;
 
 
    if (sum == 0 || sum > n)
        {
            cout << 0;
            return 0;
        }
 
    cout << fact(sum);
 
 
}
Миниатюры
Определить, сколько существует различных раскрасок полоски из N клеток  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2014, 16:56
Ответы с готовыми решениями:

Определить, сколько существует различных комбинаций по размещению цифр в 8 ячейках
Уважаемые специалисты! Нужна помощь. Задача: Есть 8 ячеек. Есть 5 цифр: 1,2,3,4,5 Сколько существует различных комбинаций по...

Определить сколько существует различных чисел, больших N, и составленных из тех же цифр
Есть вот такая задача. Пробовал перебором - огромное время выполнения. Вроде что-то из раздела &quot;комбинаторика&quot; нужно. Сама...

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

8
 Аватар для Man2201
76 / 76 / 4
Регистрация: 25.04.2010
Сообщений: 296
25.03.2014, 17:02
Для случая когда входные данные 3 2 1 0 правильный ответ - 3, Ваша программа выдаст 6. У Вас не совсем правильная формула.
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 20
25.03.2014, 17:09  [ТС]
Так правильно? А нет, так тоже не правильно получается)
Тогда как же считать?
Изображения
 
0
 Аватар для Man2201
76 / 76 / 4
Регистрация: 25.04.2010
Сообщений: 296
25.03.2014, 17:46
Минуту, сейчас напишу

Добавлено через 9 минут
Сначала разместим красные, их минимум А, вариантов размещения
N!/(A! * (N-A)!)
аналогично зеленые
(N-A)!/(B! *(N-A-B)!)
и синие
(N-A-B)!/(C!*(N-A-B-C)!)
остальные (N-A-B-C) раскрашиваем в любой цвет. Таких вариантов 3^(N-A-B-C).
Тогда конечная формула:
(N!/(A!*B!*C!*(N-A-B-C)!))* 3^(N-A-B-C).
Кажется так, хотя могу ошибаться. В случаях когда N = A+B+C точно правильная. В остальных еще надо допроверить, хотя по логике все так.
Надо доопределить факториал, что 0! = 1 и факториал от отрицательного числа равен 0

Добавлено через 11 минут
Нет, для случая N != A+B+C не подходит, включаются повторения. Сейчас додумаю
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 20
25.03.2014, 17:47  [ТС]
Переписал код, при тесте 3 0 0 0 выдает 27, то ли я накосячил где-то то ли в фомуле что то не так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <cstdio>
#include <cassert>
#include <cmath>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
 
using namespace std;
 
long long MOD = 1e9+7;
 
 
long long fact (int n)
{
    if (n == 0)
        return 1;
    if (n < 0)
        return 0;
 
    long long res = 1;
 
    for (int i = 2; i <= n; i++)
        res = (res*i) % MOD;
 
    return res;
}
 
int main()
{
   int n,a,b,c,sum, m;
 
 
    cin >> n >> a >> b >> c;
 
 
    cout << (fact(n)/(fact(a)*fact(b)*fact(c)*fact(n-a-b-c))) * pow(3,n-a-b-c);
 
}
0
 Аватар для Man2201
76 / 76 / 4
Регистрация: 25.04.2010
Сообщений: 296
25.03.2014, 17:55
Как раз тут все правильно, 27 вариантов раскраски
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 20
25.03.2014, 17:58  [ТС]
Написал код вроде работает, можете привести для него контр тест на котором он может лечь?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <cstdio>
#include <cassert>
#include <cmath>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
 
using namespace std;
 
long long MOD = 1e9+7;
 
 
long long fact (int n)
{
 
    long long res = 1;
 
    for (int i = 2; i <= n; i++)
        res = (res*i) % MOD;
 
    return res;
}
 
int main()
{
   int n,a,b,c,sum, m;
 
 
    cin >> n >> a >> b >> c;
 
    if (n < a+b+c || a+b+c == 0)
        {
            cout << 0;
            return 0;
       }
 
 
    if (a > 0 && b > 0 && c > 0)
    {
     m = min(c,min(a,b));
     sum = m * 3;
    }
    else if (a > 0 && b > 0 && c == 0)
    {
        m = min(a,b);
        sum = m*2;
    }
    else if (a > 0 && c > 0 && b == 0)
    {
        m = min(a,c);
        sum = m*2;
    }
    else if (b > 0 && c > 0 && a == 0)
    {
        m = min(b,c);
        sum = m*2;
    }
    else
        {
            cout << 1;
            return 0;
        }
 
 
    int r= 0;
 
    if (a >= m)
        r += a-m;
    if (b >= m)
        r += b-m;
    if (c >= m)
        r += c-m;
 
    cout << fact(sum)+r;
 
 
}
Добавлено через 2 минуты
При тесте 3 0 0 0, ответ 27?
Откуда там краска, там же нет клеток с краской?
Или я чего то не понял?
0
 Аватар для Man2201
76 / 76 / 4
Регистрация: 25.04.2010
Сообщений: 296
25.03.2014, 18:06
Вы немного не поняли условие задачи
В случае 3 0 0 0 не говорится что клеток нету, говорится что нету минимального количества цветов, то есть любая раскраска подходит, а всего 27 раскрасок

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream.h>
int fact(int n)
{
    if(n==0) return(1);
    if(n<0) return(0);
    int f = 1;
    for(int i=2;i<=n;i++)
        f = f*i;
    return(f);
    }
int main()
{
    int N,A,B,C;
    cin>>N>>A>>B>>C;
    int result = 0;
    for(int i = A;i <=N; i++)
       for(int j = B; j<=N; j++)
          for( int k = C; k<=N; k++)
              if(i+j+k == N)
                 result = result+fact(N)/fact(i)/fact(j)/fact(k);
    cout<<result<<endl;
    system("pause");
    }
Добавлено через 1 минуту
этот код работает правильно, только немного по принципу полного перебора. если такой сойдет - остановимся, если надо через комбинаторику вывести формулу - будем дальше думать.
1
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 20
25.03.2014, 21:25  [ТС]
Данный способ, не совсем корректен, задача проходит лишь частичный балл...

Добавлено через 7 минут
Добавил вычисление по модулю все ок, но на больших тестах идет завал по времени, так что видимо нужна формула...Обычный перебор не подходит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.03.2014, 21:25
Помогаю со студенческими работами здесь

Определить, сколько существует различных маршрутов, ведущих из левого верхнего в правый нижний угол
Дана прямоугольная доска N × M (N строк и M столбцов). В левом верхнем углу находится шахматный конь, которого необходимо переместить в...

Определить сколько существует различных способов выбрать три текста из имеющихся так, чтобы их эпичность возрастала
Невероятно, но Макса пригласили на Versus Battle — соревнование среди рэп-исполнителей, ставшее в последнее время очень популярным. ...

Сколько существует различных деревьев поиска, состоящих из N различных элементов?
дерево поиска — это двоичное дерево, для любой вершины которого выполняется следующее условие: все числа, записанные в вершинах левого ...

Сколько различных квадратов можно обвести в прямоугольнике из NxM квадратных клеток?
Подскажите, где искать зависимость для составления алгоритма? На площади смотреть? Вот задача Подсчитать, сколько различных квадратов...

Нумерация клеток заданной полоски
Помогите пожалуйста с заданием! Дана полоска длиной 2k клеток и шириной в одну клетку. Полоску несколько раз сгибают пополам так, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru