На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Loginf написав:
Выложьте плиз кто-то решение на 2 задачу 20/20.
А зачем?
Можно здесь попытаться решить и здать он-лайн, или у нас ее аналог: "2 окружности". От этого пользы больше будет.
Там всего 7 случаев, которые достаточно нарисовать на листочке и написать алгоритм.
Поза форумом
Я вот не могу понять, у меня за tangent - 16, а вроди решение - точ-в-точ, как у других, только я растояние считаю в квадрате. И за что 4 бала сняли????????????????????
#include <iostream>
using namespace std;
int main()
{
long long d, r_1, r_2;
int x1, y1, r1, x2, y2, r2;
scanf("%d%d%d%d%d%d", &x1, &y1, &r1, &x2, &y2, &r2);
d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
r_1=(r1+r2)*(r1+r2);
r_2=(r1-r2)*(r1-r2);
if ( (x1==x2) && (y1==y2) && (r1==r2) ) printf("%d\n", 7); else
if (d>r_1) printf("%d\n", 4); else
if (d==r_1) printf("%d\n", 3); else
if ( (r_2<d) && (d<r_1) ) printf("%d\n", 2); else
if (d==r_2) printf("%d\n", 1); else
printf("%d\n", 0);
}
Поза форумом
Присяжнюк А.В. написав:
Loginf написав:
Выложьте плиз кто-то решение на 2 задачу 20/20.
А зачем?
Можно здесь попытаться решить и здать он-лайн, или у нас ее аналог: "2 окружности". От этого пользы больше будет.
Там всего 7 случаев, которые достаточно нарисовать на листочке и написать алгоритм.
Чтоб сравнить с своим...у меня на 8ом и 9ом тестах (Bad data) на 10ом (Wrong answer)((
Поза форумом
У меня за случай r1=0, r2=0, точки не совпадают сняли 4 балла - я считаю это неправильным - считать окружность радиуса 0(тем более, что в условии не того, что может быть 0), и только из за этого - 4 теста
Поза форумом
Зевс написав:
У меня за случай r1=0, r2=0, точки не совпадают сняли 4 балла - я считаю это неправильным - считать окружность радиуса 0(тем более, что в условии не того, что может быть 0), и только из за этого - 4 теста
Вообщето там 10 тестов, и за каждый по 2 бала)
http://www2.olymp.vinnica.ua/cgi-bin/v_ … nguage=ukr
п.с. что значит Bad data ?
Відредаговано Loginf (2009-11-29 15:53:19)
Поза форумом
Зевс написав:
У меня за случай r1=0, r2=0, точки не совпадают сняли 4 балла - я считаю это неправильным - считать окружность радиуса 0(тем более, что в условии не того, что может быть 0), и только из за этого - 4 теста
Та нету там окружностей с 0м радиусом. Я не учитывал и у меня 20
Поза форумом
Я и не знал.
Но суть та же - окружности радиуса 0 - ни в одном нормальном(!) школьном(!) учебнике такого нет, да и в википедии тоже так.
Поза форумом
и здесь в тестах такого тоже нет)
Поза форумом
Что Bad data означает?)
Поза форумом
Loginf написав:
Что Bad data означает?)
Ну когда тебя просят вывести число, а ты выводишь текст. Что-то типа такого...
Поза форумом
Я код выложил выше, что у меня тогда не верно??????????????????????????
Поза форумом
Ошибку я нашел - переполнение.
Про 0 - извиняюсь.
Поза форумом
Ну да, логично, у тебя же координаты в интах. Сначала посмотрел что радиусы и расстояние лонг лонг вроде показалось что должно работать.
Переполнение постоянна проблема на олимпиадах, из-за него часто валятся(
Поза форумом
Ну когда же второй тур? Похоже проверка Newillusion занимает бальше времени чем все остальные.
Или все же идет перепроверка Radars
Відредаговано pilya (2009-11-29 17:09:45)
Поза форумом
Очень понравился тот факт, что решение по задаче lazer:
var n : longint; a, b : int64; cx, cy, cr : int64; i : longint; count : longint; begin read(n, cx, cy); a:=cy; b:=-cx; count:=0; for i:=1 to n do begin read(cx, cy, cr); if (a*cy > b*cx) and (sqr(a*cx + b*cy) < sqr(cr) * (sqr(a) + sqr(b))) then inc(count); end; writeln(count); end.
набирает полный балл, в то время как решение
var n : longint; a, b : int64; cx, cy, cr : int64; i : longint; count : longint; begin read(n, cx, cy); a:=cy; b:=-cx; count:=0; for i:=1 to n do begin read(cx, cy, cr); if (sqr(a*cx + b*cy) < sqr(cr) * (sqr(a) + sqr(b))) and (a*cy > b*cx) then inc(count); end; writeln(count); end.
набирает все без пары тестов (Time Limit)
(HINT: в IF'е поменяны местами условия)
я конечно понимаю, ленивые вычисления, оптимизации, но не настолько же
PS а когда сдавал, у меня вообще были longint вместо int64 и переполнение
Відредаговано Eol (2009-11-29 17:14:18)
Поза форумом
Задумайтесь над тем, что не обязательно проверяь условие с вычислением корня. Можно ведь сравнить и выражения под корнем.
И вообще, во всех задачах первого тура такая функция как вычисление квадратного корня не нужна.
Сори. Кроме задачи lotto.
Відредаговано pilya (2009-11-29 17:23:43)
Поза форумом
эмм, присмотритесь - у меня sqr, а не sqrt так что я проверял именно выражения под корнем
Поза форумом
Eol написав:
эмм, присмотритесь - у меня sqr, а не sqrt так что я проверял именно выражения под корнем
сори. сори. сори. на паскале очень давно программировал (хотя и на с++ тоже)
Получается во втором случае переполнение в первом условии, насколько я понимаю.
Поза форумом
pilya написав:
сори. сори. сори. на паскале очень давно программировал (хотя и на с++ тоже)
Получается во втором случае переполнение в первом условии, насколько я понимаю.
без проблем. да, там было переполнение, когда там стоял longint (я с ним отправлял ), а с int64 - нет, все нормально, просто по времени долго считает
Поза форумом
хтось може пояснити чому 1 задача:
---
#include <stdio.h>
int main()
{
int n,k,i;
scanf("%d%d",&n,&k);
for (i=1;i<=k;i++)
{
n=n*n;
while (n>99) n/=10;
}
printf("%d",n);
return 0;
}
--
проходить на 12? не можу зрозуміти, де помилка. задача ж проста.
а проапелювати якось можна?
Поза форумом
Если я выложу тут свои решения, не могли бы вы посмотреть, где я затупил?
Поза форумом
Астор, у тебя, скорее всего, т/о. Там бывают очень большие к, надо находить цикл (см. решение на первой странице темы).
Поза форумом
astor написав:
хтось може пояснити чому 1 задача:
---
#include <stdio.h>
int main()
{
int n,k,i;
scanf("%d%d",&n,&k);
for (i=1;i<=k;i++)
{
n=n*n;
while (n>99) n/=10;
}
printf("%d",n);
return 0;
}
--
проходить на 12? не можу зрозуміти, де помилка. задача ж проста.
а проапелювати якось можна?
1<=K<=1000000000
Вы 1000000000 раз делаете умножение. Несколько тестов видимо не прошли по времени
Поза форумом
Andrey написав:
1<=K<=1000000000
Вы 1000000000 раз делаете умножение. Несколько тестов видимо не прошли по времени
Ну и не всегда надо делить на 10 даже чаще на 100 32^2=1024.
Вот и вся простота.
Поза форумом
astor написав:
... а проапелювати якось можна?
Уважно почитайте тут: http://www.olymp.vinnica.ua/index_ua.ph … mp;cid=745
Там і про процедуру апеляції також написано.
Форум - це просто місце для спілкування і, можливо, деяких відповідей. Хоча останнє не гарантується...
Поза форумом