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

Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) - C++

Восстановить пароль Регистрация
 
костя666674555
-94 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
18.01.2014, 19:44     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #1
всем привет решил написать код от 24-ой задачи с ********
Вырубка деревьев
(Время: 1 сек. Память: 16 Мб Сложность: 46%)
Король Флатландии решил вырубить некоторые деревья, растущие перед его дворцом. Деревья перед дворцом короля посажены в ряд, всего там растет n деревьев, расстояния между соседними деревьями одинаковы.
После вырубки перед дворцом должно остаться m деревьев, и расстояния между соседними деревьями должны быть одинаковыми. Помогите королю выяснить, сколько существует способов вырубки деревьев.
Требуется написать программу, которая по заданным числам n и m определит, сколько существует способов вырубки некоторых из n деревьев так, чтобы после вырубки осталось m деревьев и соседние деревья находились на равном расстоянии друг от друга.

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

Входной файл INPUT.TXT содержит два целых числа n и m (0 ≤ m , n ≤ 1000).

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

В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — искомое число способов.

Пример

INPUT.TXTOUTPUT.TXT
15 34
Пояснение к примеру

Если обозначить условно исходное расположение деревьев перед дворцом как «TTTTT», то возможные результаты после вырубки следующие:

«TTT..», «.TTT.», «..TTT», «T.T.T».
вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <fstream>
int main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,i=0;
    f>>a>>b;
    if(a==b){
        q<<1;
    }else{
    if(b==1){
        q<<a;
    }else{
    b=b-1;
    int k=a/b;
    int p=a-b;
    long long c=(b*((k*(k-1))/2));
    int o=(k*p)-c;
    q<<(o<0 ? 1 : o);
}
    }
}
Размер кода: 212
в топе лутшее решение (с++) 120 символов
как сократить код?

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <fstream>
int main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,i=0;
    f>>a>>b;
    if(a==b){
        q<<1;
    }else{
    if(b==1){
        q<<a;
    }else{
    b=b-1;
    int o=((a/b)*(a-b))-(b*(((a/b)*((a/b)-1))/2));
    q<<(o<0 ? 1 : o);
}
    }
}
Размер кода: 198
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2014, 19:44     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%)
Посмотрите здесь:

C++ Время выполнения(сложность)
Как сократить время работы программы?! C++
C++ Счастливый билет. Надо сократить время работы программы
НОД (Время: 1 сек. Память: 16 Мб Сложность: 15%) C++
Единицы (Время: 1 сек. Память: 16 Мб Сложность: 16%) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KOPOJI
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,354
18.01.2014, 19:50     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #2
Цитата Сообщение от костя666674555 Посмотреть сообщение
Размер кода: 198
а как вы его считаете? З.Ы. ваш же код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <fstream>
int main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,o;
    f>>a>>b;
    if(a==b--)
        q<<1;
    else{
        if(!b)
            q<<a;
        else{
            o=((a/b)*(a-b))-(b*(((a/b)*((a/b)-1))/2));
            q<<(o<0 ? 1 : o);
        }
    }
}
костя666674555
-94 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
18.01.2014, 19:59  [ТС]     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #3
Цитата Сообщение от KOPOJI Посмотреть сообщение
а как вы его считаете? З.Ы. ваш же код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <fstream>
int main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,o;
    f>>a>>b;
    if(a==b--)
        q<<1;
    else{
        if(!b)
            q<<a;
        else{
            o=((a/b)*(a-b))-(b*(((a/b)*((a/b)-1))/2));
            q<<(o<0 ? 1 : o);
        }
    }
}
в смысле считаю?
KOPOJI
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,354
18.01.2014, 20:00     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #4
размер кода
костя666674555
-94 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
18.01.2014, 20:14  [ТС]     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #5
C++
1
2
3
4
5
6
7
8
#include <fstream>
#define  o ((a/b)*(a-b))-(b*(((a/b)*((a/b)-1))/2))
int main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b;
    f>>a>>b;
    a==b-- ? q<<1 : !b ? q<<a : q<<(o <0 ? 1 : o);
}
Размер кода: 168

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
#include <fstream>
#define  o ((a/b)*(a-b))-(b*(((a/b)*((a/b)-1))/2))
int main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b;
    f>>a>>b;
    q<<(a==b-- ? 1 : !b ? a : o <0 ? 1 : o);
}
Размер кода: 162

Добавлено через 4 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
размер кода
так это не я это http://********

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
#include <fstream>
#define  o ((a/b)*(a-b))-(b*(((a/b)*((a/b)-1))/2))
main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b;
    f>>a>>b;
    q<<(a==b-- ? 1 : !b ? a : o <0 ? 1 : o);
}
Размер кода: 159
volvo
Супер-модератор
 Аватар для volvo
21824 / 14187 / 3953
Регистрация: 22.10.2011
Сообщений: 25,066
Записей в блоге: 2
18.01.2014, 20:19     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #6
C++
1
2
3
4
5
6
7
#include <fstream>
int main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,k;
    f>>a>>b;
    q<<(a==b?1:(b--==1?a:(k=a/b,(k=k*(a-b)-b*(k*(k-1)/2))<0?1:k)));
}
153
KOPOJI
18.01.2014, 20:19
  #7

Не по теме:

костя666674555, макрос неверно составлен. Стоит только изменить на отрицательное значение, как выполнение станет неверным. Как минимум, надо так, а это +4 символа. Помимо этого, в плюсах вместо макросов используют встроенные функции..

C
1
#define  o ((a/b)*((a)-(b)))-(b*(((a/b)*((a/b)-1))/2))

костя666674555
-94 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
18.01.2014, 20:26  [ТС]     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #8
Цитата Сообщение от KOPOJI Посмотреть сообщение

Не по теме:

костя666674555, макрос неверно составлен. Стоит только изменить на отрицательное значение, как выполнение станет неверным. Как минимум, надо так, а это +4 символа. Помимо этого, в плюсах вместо макросов используют встроенные функции..

C
1
#define  o ((a/b)*((a)-(b)))-(b*(((a/b)*((a/b)-1))/2))

acmp переваривает

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
#include <fstream>
main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,k;
    f>>a>>b;
    q<<(a==b?1:(b--==1?a:(k=a/b,(k=k*(a-b)-b*(k*(k-1)/2))<0?1:k)));
}
150
KOPOJI
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,354
18.01.2014, 20:31     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #9
еще на пару символов короче
C++
1
2
3
4
5
6
7
#include <fstream>
int main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,k;
    f>>a>>b;
    q<<(a==b?1:(!--b?a:(k=a/b,(k*=(a-b)-b*(k*(k-1)/2))<0?1:k)));
}
Добавлено через 2 минуты

Не по теме:

и код все более и более становится похожим на код лиспа..

костя666674555
-94 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
18.01.2014, 20:33  [ТС]     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #10
C++
1
2
3
4
5
6
7
#include <fstream>
main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,k;
    f>>a>>b;
    q<<(a==b?1:(!--b?a:(k=a/b,(k*=(a-b)-b*(k*(k-1)/2))<0?1:k)));
}
147
KOPOJI
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,354
18.01.2014, 20:46     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #11
Еще минус 4
C++
1
2
3
4
5
6
7
#include <fstream>
main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,k;
    f>>a>>b;
    q<<(a==b?1:!--b?a:k=a/b,(k*=(a-b)-b*(k*(k-1)/2))<0?1:k);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 10:48     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%)
Еще ссылки по теме:

Вырубка леса C++
Оценить время выполнения и сложность простейших операций с разными типами данных C++

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

Или воспользуйтесь поиском по форуму:
костя666674555
-94 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
19.01.2014, 10:48  [ТС]     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%) #12
Цитата Сообщение от KOPOJI Посмотреть сообщение
Еще минус 4
C++
1
2
3
4
5
6
7
#include <fstream>
main(){
    std::fstream f("input.txt"),q("output.txt",2);
    int a,b,k;
    f>>a>>b;
    q<<(a==b?1:!--b?a:k=a/b,(k*=(a-b)-b*(k*(k-1)/2))<0?1:k);
}
Wrong answer 1 60 Кб
Yandex
Объявления
19.01.2014, 10:48     Сократить код ( Вырубка деревьев (Время: 1 сек. Память: 16 Мб Сложность: 46%)
Ответ Создать тему
Опции темы

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