Форум программистов, компьютерный форум CyberForum.ru

Честный раздел урожая из N ананасов - C++

Войти
Регистрация
Восстановить пароль
 
videolord
 Аватар для videolord
48 / 14 / 1
Регистрация: 20.02.2011
Сообщений: 152
16.12.2011, 16:14     Честный раздел урожая из N ананасов #1
чет не получается, помогите плис!
http://olymp.krsu.edu.kg/GeneralProb...24&format=html

а вот я так решал но выводит сервер не правильный ответ(,может алгоритм не правильный
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
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
double n,m,res;
int main(){
 int num;
 scanf("%lf%lf",&n,&m);
 
 num=n/(m+1);
 res=n-(num+1);
 if((num+1)<res/m)
 {
   printf("No solution\n");
  
 
   return 0;
 }
 printf("%d\n",(num+1));
 
 
 for (int i=0;i<m-1;i++)
   printf("%d ",num);
 
 if((int)res%int(m)==0)
   printf("%d\n",num);
 else
   printf("%d\n",num-1);
 
 system("pause");
 return 0;
}
Добавлено через 2 часа 37 минут
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
golatin
264 / 221 / 42
Регистрация: 12.10.2011
Сообщений: 320
Завершенные тесты: 1
16.12.2011, 18:02     Честный раздел урожая из N ананасов #2
Зачем
C
1
for (int i=0;i<m-1;i++)
, т.е. (m-2) раз выводить num
C
1
printf("%d ",num);

Зачем double
C
1
double n,m,res;
превращать в int
C
1
(int)res%int(m)
Да, и алгоритм вроде не верен(если он есть ), вроде отсутствием решения будет
http://www.cyberforum.ru/cgi-bin/latex.cgi?N\equiv 2(\begin{matrix}mod & (M+1)\end{matrix}), т.е.
C
1
if(N%(M+1)==2){printf("No solution\n");}
Но может, я и ошибаюсь...
videolord
 Аватар для videolord
48 / 14 / 1
Регистрация: 20.02.2011
Сообщений: 152
17.12.2011, 08:14  [ТС]     Честный раздел урожая из N ананасов #3
теперь тоже не принимает
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
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,res;
int main(){
    int num;
    scanf("%d%d",&n,&m);
 
    num=n/(m+1);
    res=n-(num+1);
    if(n%(m+1)==2){
        printf("No solution\n");
        return 0;
    }
    printf("%d\n",(num+1));
      int x=res/num; 
      for(int i=0;i<x;i++)
     printf("%d ",num);
    for(int i=0;i<m-x;i++)
     printf("%d ",num-1);
    printf("\n");
    system("pause");
    return 0;
}

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
17.12.2011, 09:29     Честный раздел урожая из N ананасов #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
#include <stdlib.h>
#include <stdio.h>
 
int main()
{
    int M = 6, N = 116, bos;
    int tmp = 0, i = 0;
 
    while ( (N - i++) % (M + 1) )
        ++tmp;
    i = 0;
 
    if ( tmp == 2 )
        puts("No SOLUTOIN");
    else if ( !tmp )
    {
        bos = N / M + 1;
        N -= bos;
        tmp = N % M;
 
        printf("\nbos = %i", bos);
        i = 0;
        while ( i++ < M )
            printf("\n4elyaDb = %i", ( N / M + ( tmp-- > 0 ) ) );
    }
    else
    {
        bos = N / (M + 1) + ( ( tmp > 1 ) ? 2 : 1 );
        tmp = ( ( tmp > 1 ) ? tmp - 2 : 0 );
 
        printf("\nbos = %i", bos);
        i = 0;
        while ( i++ < M )
            printf("\n4elyaDb = %i", ( N / (M + 1) + ( tmp-- > 0 ) ) );
    }
    return 0;
}
videolord
 Аватар для videolord
48 / 14 / 1
Регистрация: 20.02.2011
Сообщений: 152
17.12.2011, 09:37  [ТС]     Честный раздел урожая из N ананасов #5
если N=100 M=3
ваш код выдает
bos =34
4elyaDb = 22
4elyaDb = 22
4elyaDb = 22
а должен
26
25 25 24
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
17.12.2011, 09:53     Честный раздел урожая из N ананасов #6
строка 17
C
1
bos = N / (M + 1) + 1;
Добавлено через 1 минуту
100% уверен что алгоритм построен верно. лень тестировать
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
17.12.2011, 14:15     Честный раздел урожая из N ананасов #7
А если как-то так...
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
#include <iostream>
#include <vector>
 
void main() 
{
    int N,M;
    std::cin >> N >> M;
 
    std::vector<int> res;
    res.resize(M+1);
    res[0] = 1; --N;
    
    int buf = N/(M+1);
    int ost = N - buf*(M+1);
 
    if(ost == 1)
    {
        std::cout << "No solution" << std::endl;
        system("pause");
        return;
    }
 
    for(int i = 0;i<ost;++i)
        res[i]++;
 
    std::cout << (res[0]+buf) << std::endl;
    for(int i = 1;i<M+1;++i)
        std::cout << (res[i]+buf) << " ";
 
    system("pause");
    return;
}
На тех примерах работает

Добавлено через 16 минут
Да и вообще работает - Accepted) Ну немного надо код подогнать под требования соревнования и будет ок.
videolord
 Аватар для videolord
48 / 14 / 1
Регистрация: 20.02.2011
Сообщений: 152
17.12.2011, 15:18  [ТС]     Честный раздел урожая из N ананасов #8
не знаю как вы аксептили,отправил ваш код и выдает вронг ансве на тесте 1
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
17.12.2011, 15:21     Честный раздел урожая из N ананасов #9
Я же написал, что нужно вначале подогнать код под правила соревнования.
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
#include <iostream>
#include <vector>
 
void main() 
{
    int N,M;
    std::cin >> N >> M;
 
    if(N < 100 || N > 10000 || M < 2 || M > 10)
    {
        std::cout << "No solution" << std::endl;
        return;
    }
 
    std::vector<int> res;
    res.resize(M+1);
    res[0] = 1; --N;
 
    int buf = N/(M+1);
    int ost = N - buf*(M+1);
 
    if(ost == 1)
    {
        std::cout << "No solution" << std::endl;
        return;
    }
 
    for(int i = 0;i<ost;++i)
        res[i]++;
 
    std::cout << (res[0]+buf) << std::endl;
    for(int i = 1;i<M;++i)
        std::cout << (res[i]+buf) << " ";
    std::cout << (res[M]+buf);
 
    return;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 15:47     Честный раздел урожая из N ананасов
Еще ссылки по теме:

C++ Стандарт. Раздел 2. Перевести абзац на русский язык
Раздел: С++ для начинающих C++
C++ Не удается внести данные в private раздел класса
Подскажите честный сервис для ремонта материнки
Новички бывают разные: для кого создан раздел "С++ для начинающих" C++

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

Или воспользуйтесь поиском по форуму:
videolord
 Аватар для videolord
48 / 14 / 1
Регистрация: 20.02.2011
Сообщений: 152
17.12.2011, 15:47  [ТС]     Честный раздел урожая из N ананасов #10
спасибо огромное вам I.M.
Yandex
Объявления
17.12.2011, 15:47     Честный раздел урожая из N ананасов
Ответ Создать тему
Опции темы

Текущее время: 20:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru