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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2013, 19:51   #1
AshFlame
Новичок
Джуниор
 
Регистрация: 25.09.2013
Сообщений: 1
По умолчанию Нужна консультация опытных.

Вопрос олимпиадного характера.
задача звучит так



у меня есть две реализации алгоритма, оба написанных на си++

1.
Код:
#include <iostream>
#include <cstdio>
using namespace std;

int main ()
{
	int A,B,X,Y,N,i;
	cin >> A >> B;
	cin >> X >> Y;
	cin >> N;

	while ((!((X==0)&&(Y==0)))&&(!((X==0)&&(Y==A)))&&(!((X==B/2)&&(Y==A)))&&(!((X==B)&&(Y==A)))&&(!((X==B)&&(Y==0)))&&(!((X==B/2)&&(Y==0))))
	{
	if (((X==0)&&(N==4)) || ((Y==0)&&(N==2)))
			N=1;
		else if (((X==0)&&(N==3))||((Y==A)&&(N==1)))
				N=2;
			else if (((X==B)&&(N==1))||((Y==0)&&(N==3)))
					N=4;
				else if (((X==B)&&(N==2)) || ((Y==A)&&(N==4)))
						N=3;
	if(N==1)
	{
		X++;
		Y++;
	}
	else if (N==3) 
		{
			X--;
			Y--;
		}
		else if (N==2)
			{
				Y--;
				X++;
			}
			else if (N==4)
				{
					Y++;
					X--;
				}
	}
	
	if ((X==0)&&(Y==0)) i=1;

	if ((X==0)&&(Y==A)) i=2;

	if ((X==B/2)&&(Y==A)) i=3;

	if ((X==B)&&(Y==A)) i=4;

	if ((X==B)&&(Y==0))i=5;

	if ((X==B/2)&&(Y==0)) i=6;



	cout << i;

}

2.
Код:
#include <iostream>
#include <cstdio>
using namespace std;

int outp(int X, int Y, int A, int B, bool &rez,int &i)
{
		if ((X==0)&&(Y==0))
	{
		rez= true;
		i= 1;
	}
	else if ((X==0)&&(Y==A)) 
		{
			rez= true;
			i= 2;
		}
	else if (((X==B/2)&&(Y==A)))
		{
			rez= true;
			i= 3;
		}
	else if ((X==B)&&(Y==A))
		{
			rez= true;
			i= 4;
		}
	else if ((X==B)&&(Y==0))
		{
			rez= true;
			i= 5;
		}
	else if ((X==(B/2))&&(Y==0))
		{
			rez= true;
			i= 6;
		}
	else rez=false;
	
	return 0;
}

int way(int X, int Y, int A, int B, int &N)
{
	if (((X==0)&&(N==4)) || ((Y==0)&&(N==2)))
			N=1;
		else if (((X==0)&&(N==3))||((Y==A)&&(N==1)))
				N=2;
			else if (((X==B)&&(N==1))||((Y==0)&&(N==3)))
					N=4;
				else if (((X==B)&&(N==2)) || ((Y==A)&&(N==4)))
						N=3;
	return 0;
}

int step(int N, int &Y,int &X)
{
	if(N==1)
	{
		X++;
		Y++;
	}
	else if (N==3) 
		{
			X++;
			Y--;
		}
		else if (N==2)
			{
				Y--;
				X++;
			}
			else if (N==4)
				{
					Y++;
					X--;
				}
	return 0;
}

int main()
{
	int A,B,X,Y,N,i;
	bool rez;
	
	cin >> A >> B;
	cin >> X >> Y;
	cin >> N;
	rez= false;
	outp(X, Y, A, B, rez, i);
	while (rez != true)
	{
		way(X,Y,A,B,N);
		step(N,Y,X);
		outp(X, Y, A, B, rez, i);
	}

	cout << i;
	return 0;
}
оба рабочих и логика действий в них примитивна- одинаковая,
только первый весь реализован в теле, другой разбит на функции,

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



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 26.09.2013 в 09:06.
AshFlame вне форума Ответить с цитированием
Старый 26.09.2013, 05:27   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Жесть какая....Switch не пробовали использовать?
Мне кажется что многократный вызов функций в цикле и дает вам то самое затянутое время выполнения программы. Каждый раз передавать в цикле в 3 функции более 10 аргументов или просто имея 5 переменных пробегать по 3ем IF-ам... Попробуйте сменить конструкцию на Switch все таки.
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна консультация Хочу все Помощь студентам 0 19.09.2012 11:54
нужна консультация Vogd777 Помощь студентам 2 28.04.2010 09:01
нужна консультация =( ShuraFK Софт 3 27.04.2009 16:43