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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2015, 20:22   #21
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
//#include <fstream>
#include <iostream>

using namespace std;

long long gcd(long long a, long long b)
{
	while (a*b != 0)
		if (a > b)
			a %= b;
		else
			b %= a;
	return a + b;
}


long long main()
{
	long long k;
	cin >> k;

	for (long long i = 0; i < k; i++)
	{
		long long n, a, b, c;
		cin >> n >> a >> b >> c;
		double p = a + b / (1.0*c);
		double q = a + a/(n-1.0);

		if (p < q)
		{
			a = a%n;
			b = a;
			c = n - 1;
			long long g = gcd(b, c);
			b /= g;
			c /= g;
			if (b == c)
			{
				a = 0; b = 0; c = 1;
			}

			cout << a << " " << b << " " << c << endl;
		}
		else
		{
			a = (a+1)%n;
			b = a;
			c = n - 1;
			long long g = gcd(b, c);
			b /= g;
			c /= g;

			if (b == c)
			{
				a = 0; b = 0; c = 1;
			}

			cout << a << " " << b << " " << c << endl;
		}
	}
	
	return 0;
}
Я добрался до 30..

Лажаю на 5 тестах
Poma][a вне форума Ответить с цитированием
Старый 05.01.2015, 20:32   #22
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ромаха, с вещественными может и не получится. Там тесты могут быть такие, что погрешности повлияют на рузультат. Все таки задача в целых числах и они очень большие, до миллиарда. Ну я бы точно подобрал такой тест из вредности
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.01.2015, 20:56   #23
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ромаха, с вещественными может и не получится. Там тесты могут быть такие, что погрешности повлияют на рузультат. Все таки задача в целых числах и они очень большие, до миллиарда. Ну я бы точно подобрал такой тест из вредности
Яху!
Я сдал! Бинго! Святые угодники, праздник!
Спасибо

Код:
//#include <fstream>
#include <iostream>

using namespace std;

//ifstream cin("input.txt");
//ofstream cout("a.txt");

long long gcd(long long a, long long b)
{
	while (a*b != 0)
		if (a > b)
			a %= b;
		else
			b %= a;
	return a + b;
}


int main()
{
	long long k;
	cin >> k;

	for (long long i = 0; i < k; i++)
	{
		long long n, a, b, c;
		cin >> n >> a >> b >> c;
		//long long p = a*c*(n - 1) + b*(n - 1);
		//long long q = a*c*(n - 1) + a*c;

		long long p = b*(n - 1);
		long long q = a*c;

		if (p < q)
		{
			a = a%n;
			b = a;
			c = n - 1;
			long long g = gcd(b, c);
			b /= g;
			c /= g;
			if (b == c)
			{
				a = 0; b = 0; c = 1;
			}

			cout << a << " " << b << " " << c << endl;
		}
		else
		{
			a = (a+1)%n;
			b = a;
			c = n - 1;
			long long g = gcd(b, c);
			b /= g;
			c /= g;

			if (b == c)
			{
				a = 0; b = 0; c = 1;
			}

			cout << a << " " << b << " " << c << endl;
		}
	}
	
	return 0;
}
Poma][a вне форума Ответить с цитированием
Старый 05.01.2015, 21:22   #24
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Хорошо

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Яху!
Я сдал! Бинго! Святые угодники, праздник!
Спасибо

Код:
//#include <fstream>
#include <iostream>

using namespace std;

//ifstream cin("input.txt");
//ofstream cout("a.txt");

long long gcd(long long a, long long b)
{
	while (a*b != 0)
		if (a > b)
			a %= b;
		else
			b %= a;
	return a + b;
}


int main()
{
	long long k;
	cin >> k;

	for (long long i = 0; i < k; i++)
	{
		long long n, a, b, c;
		cin >> n >> a >> b >> c;
		//long long p = a*c*(n - 1) + b*(n - 1);
		//long long q = a*c*(n - 1) + a*c;

		long long p = b*(n - 1);
		long long q = a*c;

		if (p < q)
		{
			a = a%n;
			b = a;
			c = n - 1;
			long long g = gcd(b, c);
			b /= g;
			c /= g;
			if (b == c)
			{
				a = 0; b = 0; c = 1;
			}

			cout << a << " " << b << " " << c << endl;
		}
		else
		{
			a = (a+1)%n;
			b = a;
			c = n - 1;
			long long g = gcd(b, c);
			b /= g;
			c /= g;

			if (b == c)
			{
				a = 0; b = 0; c = 1;
			}

			cout << a << " " << b << " " << c << endl;
		}
	}
	
	return 0;
}
УРРРРААААААААА!!!! Рад, что получилось наконец. Спасибо всем, кто сумел найти время и помочь мне с этой задачей!
isst вне форума Ответить с цитированием
Старый 05.01.2015, 21:41   #25
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Вопрос

Тока у меня чейта заваливает тесты 22-24 и 32-34, вот я перекодил:

Код:
function NOD(a, b:LongInt):LongInt;

begin
  while (a * b <> 0) do
  begin
    if (a > b) then a:= a mod b
    else b:= b mod a;
  end;
  NOD:= a + b;
end;

var k, n, a, b, c, i, p, q, g:LongInt;

begin
  readln(k);
  for i:= 1 to k do
  begin
    readln(n, a, b, c);
    p:= b * (n - 1);
    q:= a * c;
    if (p < q) then
    begin
      a:= a mod n;
      b:= a;
      c:= n - 1;
      g:= NOD(b, c);
      b:= b div g;
      c:= c div g;
      if (b = c) then
      begin
        a:= 0;
        b:= 0;
        c:= 1;
      end;
      writeln(a, ' ', b, ' ', c);
    end
    else
    begin
      a:= (a + 1) mod n;
      b:= a;
      c:= n - 1;
      g:= NOD(b, c);
      b:= b div g;
      c:= c div g;
      if (b = c) then
      begin
			  a:= 0;
			  b:= 0;
			  c:= 1;
			end;
			writeln(a, ' ', b, ' ', c);	
	  end;
	end;
end.
Сори за "отскоки", просто из ПаскальАБЦ копировал.
Ума не приложу, где тут ошибка...
isst вне форума Ответить с цитированием
Старый 05.01.2015, 21:44   #26
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Потому, что LongInt не прокатит при умножении миллиарда на миллиард
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.01.2015, 21:45   #27
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
По умолчанию

РомаХа, а можешь свой код на Паскале скинуть, ну чисто сравнить что там не так у меня (я видел, у тебя там была посылка на Паскале)?
isst вне форума Ответить с цитированием
Старый 05.01.2015, 21:50   #28
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Радость

А-а, все-все, понял в чем косяк... Int64 forever)))

Код:
function NOD(a, b:Int64):Int64;

begin
  while (a * b <> 0) do
  begin
    if (a > b) then a:= a mod b
    else b:= b mod a;
  end;
  NOD:= a + b;
end;

var n, a, b, c, p, q, g:Int64;
    k, i:LongInt;

begin
  readln(k);
  for i:= 1 to k do
  begin
    readln(n, a, b, c);
    p:= b * (n - 1);
    q:= a * c;
    if (p < q) then
    begin
      a:= a mod n;
      b:= a;
      c:= n - 1;
      g:= NOD(b, c);
      b:= b div g;
      c:= c div g;
      if (b = c) then
      begin
        a:= 0;
        b:= 0;
        c:= 1;
      end;
      writeln(a, ' ', b, ' ', c);
    end
    else
    begin
      a:= (a + 1) mod n;
      b:= a;
      c:= n - 1;
      g:= NOD(b, c);
      b:= b div g;
      c:= c div g;
      if (b = c) then
      begin
			  a:= 0;
			  b:= 0;
			  c:= 1;
			end;
			writeln(a, ' ', b, ' ', c);	
	  end;
	end;
end.
isst вне форума Ответить с цитированием
Старый 05.01.2015, 21:57   #29
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Хорошо

Цитата:
Сообщение от isst Посмотреть сообщение
Код:
function NOD(a, b:LongInt):LongInt;
 
var c:LongInt;
 
begin
  while (b <> 0) do
  begin
    c:= a mod b;
    a:= b;
    b:= c;
  end;
  NOD:= a;
end;

var k, n, a, b, c, i:LongInt;
 
procedure outputresult(x, y, h:LongInt);
 
var alpha, betta, gamma, buf, nodik:LongInt;
 
begin
  alpha:=  x div y;
  buf:= x - y * alpha;
  alpha:= (h+alpha) mod N;
  nodik:= NOD(buf, y);
  betta:= buf div nodik;
  gamma:= y div nodik;
  writeln(alpha, ' ', betta, ' ', gamma);
end;
 

begin
  readln(k);
  for i:= 1 to k do
  begin
    readln(n, a, b, c);
    if b*(N-1) < a*c then outputresult(a, n-1, a) 
    else outputresult(a+1, n-1, a+1);
  end;
end.
Бли-ин, ребят, я вот щас в своем первом коде, который я предложил, заменил все на Int64 (ну кроме k, I) и он прошел-таки! С одной стороны хорошо, а с другой - зря убили время?.. Хотя НЕТ, наверное, не зря, ведь все равно интересно было докопаться до сути, ведь правда?
isst вне форума Ответить с цитированием
Старый 05.01.2015, 22:35   #30
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Интересно-интересно..
А тот Паскалевский код - господина Аватара.. А НОД украл у Вас)
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часики Rost93 JavaScript, Ajax 2 13.11.2011 02:13
Часики TuneK Помощь студентам 0 15.04.2009 20:10
Часики на Ассемблере -=Hellsing-= Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 07.02.2009 11:14
Зацените Часики. Vemer Софт 2 01.02.2009 11:08
Задачка про часики. RealSHELS Паскаль, Turbo Pascal, PascalABC.NET 2 13.09.2008 18:17