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

Помогите Морфеусу узнать, сможет ли Нео убить ровно N агентов ударами левой и правой ноги

29.08.2019, 22:19. Показов 2605. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, всем задача след.:

Морфеус и Нео готовятся к очередной схватке с армией агентов. Морфеус отвечает за разработку
всей операции, а Нео проявляет свои способности избранного. А именно — Нео будет наносить удары
по агентам либо правой, либо левой ногой. Правой ногой он нейтрализует сразу 5 агентов, а левой —
всего 3. Всего на бой выйдут N агентов. Морфеус ценит свои кадры, поэтому хочет заранее знать,
сколько ударов каждой ногой нанесет Нео при условии, что каждой ногой он может сделать не более
R ударов, чтобы не устать, и не менее L ударов, потому что даже в матрице надо тренироваться.
Помогите Морфеусу узнать, сможет ли Нео убить ровно N агентов ударами левой и правой
ноги. Если план невыполним, то выведите −1. Иначе выведите количество ударов сначала правой,
потом левой ногой.
Если решений несколько, выведите то, где правая нога совершает наименьшее возможное число
ударов.

Формат входных данных
В первой строке дано единственное целое число 0 <= N <= 106 — число агентов.
Во второй строке даны два целых числа 0 <= L <= R <= 1018 — ограничения на число ударов
каждой из ног.

Формат выходных данных
Если решения нет, выведите единственное число −1 Иначе выведите два целых числа — число
ударов правой и левой ногой.


Примеры
ввод: 13 1 2
вывод: 2 1

ввод: 2 0 100
вывод: -1

ввод: 30 2 10
вывод: 3 5
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.08.2019, 22:19
Ответы с готовыми решениями:

При нажатии левой клавиши "мыши" отразить курсор в левой половине экрана, а при нажатии правой - в правой
При нажатии левой клавиши &quot;мыши&quot; отразить курсор в левой половине экрана, а при нажатии правой - в правой, использовав в случае...

Анимация: человечек по желанию пользователей либо махает правой рукой, либо левой или правой ногой
написать программу, при помощи которой человечек будет по желанию пользователей либо махать правой рукой, либо левой или правой ногой. в...

Рисунки с левой и с-правой сторону
Подскажите как сделать рисунок с левой стороны и с правой? я сделал но у меня криво отображается правая сторона ниже получается. ...

24
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,749
30.08.2019, 07:32
Цитата Сообщение от Xait Посмотреть сообщение
ввод: 30 2 10
вывод: 3 5
а где тут логика? (ошибка явная или ваша очяпятка )
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
30.08.2019, 10:29
marat_miaki, (3 * 5) + (5 * 3) = 30, 3 и 5 принадлежат [2 - 10]. почему ошибка?
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,749
30.08.2019, 10:48
все понял про интервал

Добавлено через 5 минут
все понял про интервал, но ограничение 2 удара для левой и 10 для правой, а удар левой больше ограничения
0
30.08.2019, 13:47

Не по теме:

А руки использовать можно?
Или только ногами разрешаете?
С уважением, Neo.

0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,749
31.08.2019, 13:36
Во наворотил
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
#include <iostream>
using namespace std;
int main()
{
    int N,L,R;
    int maxL,maxR,rezL,rezR;
    int count=0;
    bool otvet= false;
    cout << " N : "; cin >> N;
    cout << " L : "; cin >> L;
    cout << " R : "; cin >> R;
    
    maxL=N/3;
 if (L < maxL) maxL=L; 
      maxR=N/5; if (R < maxR) maxR=R;
    
    for (int i = 0; i<=maxL; ++i ) 
    {
        for (int j = 0; j<=maxR; ++j)
        {
            if (i*3+j*5 ==N) 
            {   
                count++;
                otvet = true; 
                if (count>1) 
                {
                    if (rezR > j) { rezR=j; rezL=i;}
                }
                else 
                {
                    rezR=j; rezL=i;
                }
                cout<< " cn "<<count << " R = " << rezR << " L = "<< rezL << endl; 
            }
        }
    }
    if (otvet){
        cout << "Otvet: R = " << rezR << " L = "<< rezL << endl; 
        }
    else cout << " Нет решения" ; 
    return 0;
}
0
2 / 2 / 0
Регистрация: 04.11.2017
Сообщений: 58
31.08.2019, 13:46  [ТС]
marat_miaki, не не только первый пример работает а остальные не

Добавлено через 1 минуту
ну в общем гляньте у меня оно рабочая но после 4 теста из 100, оно дает ошибки первые 3 теста я уже написал а остальные не знаю
C++ (Qt)
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
using namespace std;
int main()
{
  long long N, L, R, M, x=0, y=0;
  cin >> N >> L >> R;M=N;
  if(N<=3*L+5*R){
    do{
      N-=3;x++;
      M-=5;y++;
    }
    while(N%5!=0 && M%3!=0 && N>0 && M>0);
   if(N>=0 and N%5==0){
     y=N/5;
     cout << y << " " << x << endl;
   }
   else{
     if(M>=0 and M%3==0){
       x=M/3;
       cout << y << " " << x << endl;
     }
     else{
       cout << -1 << endl;
     }
   }
 }
  else{
    cout << -1 << endl;
  }
 return 0;
}
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,749
31.08.2019, 13:47
вы не правы ожидая от третьего результат, там прокатит только при 30 5 10 я об этом говорил выше
ну и уберите все лишнее, и напишите -1 куда нодо
0
2 / 2 / 0
Регистрация: 04.11.2017
Сообщений: 58
31.08.2019, 13:55  [ТС]
marat_miaki, ну окей, будем считать что 3 пример это -1

но и в вашем коде 2 пример некорректно не работает
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,749
31.08.2019, 14:14
30 2 10 это 6 0 - 30 5 10 это 3 5
Выводится количество ударов сначала правой,потом левой ногой -- это условие задачи

Добавлено через 11 минут
все понял свою ошибку, в условии прописано не менее L ударов, я учел как не более L ударов

Добавлено через 4 минуты
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int N,L,R;
    int maxL,maxR,rezL,rezR;
    int count=0;
    bool otvet= false;
    cout << " N : "; cin >> N;
    cout << " L : "; cin >> L;
    cout << " R : "; cin >> R;
    
    maxR=N/5; if (R < maxR) maxR=R;
    
    for (int i = L; i<=maxR; ++i ) 
    {
        for (int j = 0; j<=maxR; ++j)
        {
            if (i*3+j*5 ==N) 
            {   
                count++;
                otvet = true; 
                if (count>1) 
                {
                    if (rezR > j) { rezR=j; rezL=i;}
                }
                else 
                {
                    rezR=j; rezL=i;
                }
            //  cout<< " cn "<<count << " R = " << rezR << " L = "<< rezL << endl; 
            }
        }
    }
    if (otvet){
        cout <<  rezR << ' ' <<  rezL << endl; 
        }
    else cout << "-1" ; 
    return 0;
}
1
2 / 2 / 0
Регистрация: 04.11.2017
Сообщений: 58
31.08.2019, 17:06  [ТС]
marat_miaki, Ой, как это задача меня уже раздражает, попробовал еще разные способы решение задач но ни каких успехов, говорит что 7 тест как то неправильно работает
Миниатюры
Помогите Морфеусу узнать, сможет ли Нео убить ровно N агентов ударами левой и правой ноги  
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
31.08.2019, 17:14
А так ?:
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
#include <iostream>
#include <algorithm>
 
int main()
{
    uint64_t n, l, r;
    std::cin >> n >> l >> r;
 
    if (n < l * 3 + l * 5) {
        std::cout << -1;
        return 0;
    }
    n -= l * 3 + l * 5;
    int64_t ulk = std::min(n / 3, r - l);
    uint64_t urk = std::min((n - 3 * ulk) / 5, r - l);
    switch (n - ulk * 3 + urk * 5)
    {
    case 1:
        ulk -= 3, urk += 2;
        break;
    case 2:
        ulk -= 1, urk += 1;
        break;
    case 3:
        ulk -= 4, urk += 3;
        break;
    case 4:
        ulk -= 2, urk += 2;
        break;
    default:
        break;
    }
 
    if (ulk >= 0 && urk <= r - l && ulk * 3 + urk * 5 == n) {
        std::cout << urk + l << ' ' << ulk + l;
    }
    else {
        std::cout << -1;
    }
 
    return 0;
}
1
2 / 2 / 0
Регистрация: 04.11.2017
Сообщений: 58
31.08.2019, 17:26  [ТС]
nalbe666, немножечко, продвигались теперь в 8 место ошибко
Миниатюры
Помогите Морфеусу узнать, сможет ли Нео убить ровно N агентов ударами левой и правой ноги  
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
31.08.2019, 17:51
Тогда так.
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
#include <iostream>
#include <algorithm>
 
int main()
{
    uint64_t n, l, r;
    std::cin >> n >> l >> r;
 
    if (l > n / 3 || r > n / 3 || n < l * 3 + l * 5) {
        std::cout << -1;
        return 0;
    }
    n -= l * 3 + l * 5;
    int64_t ulk = std::min(n / 3, r - l);
    uint64_t urk = std::min((n - 3 * ulk) / 5, r - l);
    switch (n - ulk * 3 + urk * 5)
    {
    case 1:
        ulk -= 3, urk += 2;
        break;
    case 2:
        ulk -= 1, urk += 1;
        break;
    case 3:
        ulk -= 4, urk += 3;
        break;
    case 4:
        ulk -= 2, urk += 2;
        break;
    default:
        break;
    }
 
    if (ulk >= 0 && urk <= r - l && ulk * 3 + urk * 5 == n) {
        std::cout << urk + l << ' ' << ulk + l;
    }
    else {
        std::cout << -1;
    }
 
    return 0;
}
0
2 / 2 / 0
Регистрация: 04.11.2017
Сообщений: 58
31.08.2019, 17:59  [ТС]
nalbe666, на этом варианте не 8 а теперь 7 ошибку выдает
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,749
31.08.2019, 17:59
И что там в 7 и 8 входных данных?
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
31.08.2019, 18:06
Где-то тупая ошибка.
Xait,
Цитата Сообщение от nalbe666 Посмотреть сообщение
if (l > n / 3 || r > n / 3 || n < l * 3 + l * 5) {
*
Попробуйте замените на
C++
1
if (l > n / 3 || n < l * 3 + l * 5) {
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,749
31.08.2019, 18:30
в моем коде стоит попробовать maxR=N/5; заменить на maxR=N/3;
или
C++
1
2
3
4
5
    maxR=N/3; if (R < maxR) maxR=R;
    
    for (int i = L; i<=maxR; ++i ) 
    {
        for (int j = 0; j<=maxR; ++j)
прописать как без моих заморочек
C++
1
2
3
4
5
  //  maxR=N/5; if (R < maxR) maxR=R;
    
    for (int i = L; i<=R; ++i ) 
    {
        for (int j = 0; j<=R; ++j)
Добавлено через 8 минут
if (rezR > j) { rezR=j; rezL=i;} тоже подправить на if (rezR > j&& rezL>i) { rezR=j; rezL=i;}
0
2 / 2 / 0
Регистрация: 04.11.2017
Сообщений: 58
31.08.2019, 19:06  [ТС]
marat_miaki, это я тоже не Знаю, если бы знал решил бы задачу давно, помнял

nalbe666, заменил не помогло

у обоих не работает до 7 задачи
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
31.08.2019, 19:40
Барабанная дробь..

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
#include <iostream>
#include <algorithm>
 
int main()
{
    uint64_t n, l, r;
    std::cin >> n >> l >> r;
 
    if (n / 8 < l) {
        std::cout << -1;
        return 0;
    }
    n -= l * 8;
    int64_t ulk = std::min(n / 3, r - l);
    uint64_t urk = std::min((n - ulk * 3) / 5, r - l);
    switch (n - ulk * 3 + urk * 5)
    {
    case 1:
        ulk -= 3, urk += 2;
        break;
    case 2:
        ulk -= 1, urk += 1;
        break;
    case 3:
        ulk -= 4, urk += 3;
        break;
    case 4:
        ulk -= 2, urk += 2;
        break;
    default:
        break;
    }
 
    if (ulk >= 0 && urk <= r - l && ulk * 3 + urk * 5 == n) {
        std::cout << l + urk << ' ' << l + ulk;
    }
    else {
        std::cout << -1;
    }
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2019, 19:40
Помогаю со студенческими работами здесь

ПравилА левой и правой руки
Помогите пожалуйста с правилами левой и правой руки со всеми тонкостями)) Постоянно путаю все. Объясните, если не трудно, что бы я раз и...

Отличие правой и левой свертки
Правую и левую свертку можно реализовать так: #!/usr/bin/racket #lang scheme (define (fold-right op initial sequence) ...

Код левой и правой кнопки мышки
Нужны коды кнопок мышки, в Keys не нашёл. Я использую следующий код для захвата кнопок: protected override bool ProcessCmdKey(ref...

Ввод текста в TEdit с правой стороны, а не с левой
Можнали сделать чтобы текст в редакторе Edit вводился не с левой части а с правой.

Работа с PopupMenu левой и правой кнопками мыши
В моем проекте требуется задать возможность менять пользователем названия осей координат (показаны зеленым цветом) с помощью всплывающего...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru