Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2018, 23:03   #1
Gud
 
Регистрация: 13.10.2018
Сообщений: 7
По умолчанию оптимизировать задачу на с++

На очередном уроке учитель по физкультуре решил устроить для школьников соревнования по броскам мяча в баскетбольную корзину. При проведении соревнования было замечено одно интересное явление: на очередном этапе соревнований успешные и неуспешные попытки бросков чередовались: успешный, неуспешный, успешный, неуспешный и т.д. (первый был успешным). Школьникам на каждом этапе разрешалась только одна попытка. Тот, кто попадал в корзину, переходил в следующий тур (этап), а тот, кто делал неудачную попытку – выбывал из соревнований. Таким образом, первым выбывал всегда школьник с номером 2, а последним – победитель с номером 1.

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

Формат ввода
В единственной строке входного файла INPUT.TXT содержатся два натуральных числа: общее число учеников N и порядковый номер ученика в стартовом списке M. Числа разделены пробелом (1 ≤ M,N ≤ 109).

Формат вывода
В единственную строку выходного файла OUTPUT.TXT нужно вывести каким по счету школьник M выбыл из соревнований. Если это победитель состязания, то выводится число N.


моя программа работает, но она не проходит тест по времени(ограничение времени 0,1с)






Код:
#include<iostream>

using namespace std;

int main() {

	int n, m, a, b, i, ch,per,k;
	cin >> n >> m;

	ch = 0;
	per = 1;

	k = 0;
	
	a = 0;
	if (m == 1) cout << n; else {
		while (a != 1) {
			

			for (i = 1; i <= n; i = i + per) {

				k = k + 1;
				if (k % 2 == 0) ch = ch + 1;
				/*cout << ch;*/

				if ((m == i) && (k % 2 == 0)) { a = 1; break; }
			}

			per = per * 2;
			k = 0;

		}


		cout << ch;
	}


	system("pause");
	return 0;
}
Gud вне форума Ответить с цитированием
Старый 13.10.2018, 23:37   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Gud Посмотреть сообщение
моя программа работает, но она не проходит тест по времени
Тут обычно не "оптимизировать" надо, а алгоритм менять.
Ничего лучше решения "в лоб" в голову не приходит?
Black Fregat вне форума Ответить с цитированием
Старый 13.10.2018, 23:52   #3
Gud
 
Регистрация: 13.10.2018
Сообщений: 7
По умолчанию

я весь день над ней бьюсь, мне и это решение с трудом далось)
Gud вне форума Ответить с цитированием
Старый 14.10.2018, 00:02   #4
Gud
 
Регистрация: 13.10.2018
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Ничего лучше решения "в лоб" в голову не приходит?
нет

Последний раз редактировалось Gud; 14.10.2018 в 00:06.
Gud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите на С#, как оптимизировать/переписать эту задачу Aleksandr H. Помощь студентам 3 12.11.2016 14:17
Оптимизировать задачу на графы Dmitry_DM Помощь студентам 15 07.04.2015 10:39
Оптимизировать код по IE 7 nibufep JavaScript, Ajax 1 08.03.2015 13:31
Необходимо оптимизировать задачу паскаль anton.dasuik Помощь студентам 2 28.02.2013 20:28
Оптимизировать код. Манжосов Денис :) Общие вопросы Delphi 1 20.10.2008 19:06