На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
guest1 написав:
NewIllusion напоминает какую-то схему метро
Какими-то продвинутыми методами рисовал, или, пардон, в paint'e?
Интересно сколько времени это займет нарисовать в paint???)))
А прога для графов - специальная, довольно удобная - yEd Graph Editor
Поза форумом
Лотто набрала 13 из 20.
int main() { int n; scanf("%d",&n); filler(); int ans; for (int i=0; i<10; i++) { ans=n*10+i; if (check(ans)) { cout<<ans<<endl; return 0; } } for (int i=10; i<100; i++) { ans=n*100+i; if (check(ans)) { cout<<ans<<endl; return 0; } } for (int i=100; i<1000; i++) { ans=n*1000+i; if (check(ans)) { cout<<ans<<endl; return 0; } } return 0; }
Ф-ция check проверяет на простоту правильно, только она длинная из-за использования быстрого алгоритма, который проверен на брутфорсе. В чем может быть проблема?
Відредаговано n1ce (2009-11-28 23:54:35)
Поза форумом
Слава написав:
А прога для графов - специальная, довольно удобная - yEd Graph Editor
Ну, если энтузиазма хватит, то и в paint'e можно за название спасибо, посмотрю что за вещь.
n1ce, если я правильно понял, то
1) там может быть TL из-за того, что ты просматриваешь все цифры от 0 до 9 в конце вместо только 1, 3, 7, 9;
2) ты рассматриваешь 10..99, а надо 00..99. И соответственно не 100..999, а 000..999 и т. д.
Відредаговано guest1 (2009-11-29 00:01:08)
Поза форумом
guest1 написав:
А прога для графов - специальная, довольно удобная - yEd Graph Editor
Ну, если энтузиазма хватит, то и в paint'e можно за название спасибо, посмотрю что за вещь.
n1ce, если я правильно понял, то
1) там может быть TL из-за того, что ты просматриваешь все цифры от 0 до 9 в конце вместо только 1, 3, 7, 9;
2) ты рассматриваешь 10..99, а надо 00..99. И соответственно не 100..999, а 000..999 и т. д.
Та если бы, но выдает WA.
Поза форумом
n1ce написав:
Лотто набрала 13 из 20.
Ф-ция check проверяет на простоту правильно, только она длинная из-за использования быстрого алгоритма, который проверен на брутфорсе. В чем может быть проблема?
А если к числу нужно дописать с ведущими нулями? Например для 46587 ответом будет 4658701, а у тебя такие случаи не проверяются
Поза форумом
Блин, протупил, епт) спасибо!
Поза форумом
Radars: (20 из 20)
#include<iostream> #include<math.h> using namespace std; int main() { int a[100001],n,mn=100001,mx=-100001,i,k,d,p=200001,t; long long r; cin>>n; for(i=0;i<n;i++) { cin>>a[i]; if(a[i]>mx)mx=a[i]; if(a[i]<mn)mn=a[i]; } d=(mn+mx); for(i=0;i<n;i++) { t=abs(d-2*a[i]); if(t<p){p=t;k=i;} } r=(long long)(mx-a[k])*(long long)(a[k]-mn); cout<<r<<endl; return 0; }
Поза форумом
Мои Radar, Lazer набрали по 20, а в Lotto тоже не учел возможность добавления сначала 0я и набрал 13 =\
Поза форумом
Andrey написав:
Мои Radar, Lazer набрали по 20, а в Lotto тоже не учел возможность добавления сначала 0я и набрал 13 =\
Поторопился. А ведь времени было много. Только проверяй и перепроверяй.
Поза форумом
LeonID написав:
Andrey написав:
Мои Radar, Lazer набрали по 20, а в Lotto тоже не учел возможность добавления сначала 0я и набрал 13 =\
Поторопился. А ведь времени было много. Только проверяй и перепроверяй.
Так я вообще не успел отправить) Думал сегодня порешаю. Я порешал и как раз закрыли отправку)
Відредаговано Andrey (2009-11-29 00:22:55)
Поза форумом
Andrey написав:
Так я вообще не успел отправить) Думал сегодня порешаю. Я порешал и как раз закрыли отправку)
Особо не расстраивайтесь - в последующих турах задачи "стоят" в баллах больше и есть шанс все исправить и попасть на реал-тайм тур.
Так что еще далеко не все потеряно.
Поза форумом
Andrey написав:
LeonID написав:
Andrey написав:
Мои Radar, Lazer набрали по 20, а в Lotto тоже не учел возможность добавления сначала 0я и набрал 13 =\
Поторопился. А ведь времени было много. Только проверяй и перепроверяй.
Так я вообще не успел отправить) Думал сегодня порешаю. Я порешал и как раз закрыли отправку)
Так ведь вроде сегодня уже нельзя было отправлять решения. По регламенту.
Поза форумом
2Присяжнюк А.В.: А будут ли потом эти задачи на e-olimp.com ???
Поза форумом
LeonID написав:
Andrey написав:
LeonID написав:
Поторопился. А ведь времени было много. Только проверяй и перепроверяй.Так я вообще не успел отправить) Думал сегодня порешаю. Я порешал и как раз закрыли отправку)
Так ведь вроде сегодня уже нельзя было отправлять решения. По регламенту.
Ну до часов 6и активной светилась еще страница регистрации
Поза форумом
Andrey написав:
LeonID написав:
Andrey написав:
Так я вообще не успел отправить) Думал сегодня порешаю. Я порешал и как раз закрыли отправку)Так ведь вроде сегодня уже нельзя было отправлять решения. По регламенту.
Ну до часов 6и активной светилась еще страница регистрации
Регистрация будет доступна вплоть до конца третьего тура
Поза форумом
я хотел сказать "отсылки решений"
Поза форумом
Слава написав:
2Присяжнюк А.В.: А будут ли потом эти задачи на e-olimp.com ???
Если Юрий Яковлевич даст добро - то почему бы и нет?
Мы только за, тем более, что работаем в поддержку друг друга, да и задачи у платформ разные. Тут - дополнительно отбирать на всеукраинскую, а на e-olimp - тренировать.
Кроме того, они обязательно будут доступны здесь по окончанию в режиме он-лайн.
Поза форумом
Слава написав:
Lotto: (20 из 20)
Код:
#include<iostream> #include<math.h> using namespace std; bool prost(int a) { if((a==1)||(a==0)) return false; int b=(int)(sqrt((double) a)); for(int i=2;i<=b;i++) if(a%i==0) return false; return true; } int main2(int n) { int l=1,s,r,i,k; while(true) { k=n;s=1; for(i=0;i<l;i++)s*=10; k*=s; for(i=0;i<s;i++) { r=k+i; if(prost(r)) return r; } l++; } } int main() { int n; cin>>n; cout<<main2(n)<<endl; return 0; }
Обидно когда даже в первом туре допускается проверка на простоту таким не опимизированным методом. Я думаю жури следует задуматься. Программа как минимум выполняется раза в 2-а медленее чем у guest1.
Поза форумом
LeonID написав:
lazer(не самое оптимальное решение , но надеюсь правильное)
Код:
var dx,dy,j,kilk,kilkprobitix,xk,yk,rk,koefficient:longint; function perevirkaprobitosi(x,y,r:longint):boolean; var i,pochatok,kinec:longint; xpromen,ypromen,nablizennja:extended; begin if abs(dx)>=abs(dy) then begin if (dx>=0) and (dy>=0) then begin if x-r<0 then pochatok:=0 else pochatok:=x-r; if x+r<0 then kinec:=0 else kinec:=x+r; for i:=(pochatok-1) to (kinec+1) do begin xpromen:=i; if dx=0 then begin ypromen:=i;xpromen:=0;end else ypromen:=xpromen*(dy/dx); if (sqr(xpromen-x)+sqr(ypromen-y))<(r*r) then begin perevirkaprobitosi:=true;break;end else perevirkaprobitosi:=false; end; end else if (dx>=0) and (dy<=0) then begin if x-r<0 then pochatok:=0 else pochatok:=x-r; if x+r<0 then kinec:=0 else kinec:=x+r; for i:=(pochatok-1) to (kinec+1) do begin xpromen:=i; if dx=0 then begin ypromen:=-i;xpromen:=0;end else ypromen:=xpromen*(dy/dx); if (sqr(xpromen-x)+sqr(ypromen-y))<(r*r) then begin perevirkaprobitosi:=true;break;end else perevirkaprobitosi:=false; end; end else if (dx<=0) and (dy>=0) then begin if x+r>0 then pochatok:=0 else pochatok:=x+r; if x-r>0 then kinec:=0 else kinec:=x-r; for i:=(abs(pochatok)-1) to (abs(kinec)+1) do begin xpromen:=-i; if dx=0 then begin ypromen:=-i;xpromen:=0;end else ypromen:=xpromen*(dy/dx); if (sqr(xpromen-x)+sqr(ypromen-y))<(r*r) then begin perevirkaprobitosi:=true;break;end else perevirkaprobitosi:=false; end; end else begin if x+r>0 then pochatok:=0 else pochatok:=x+r; if x-r>0 then kinec:=0 else kinec:=x-r; for i:=(abs(pochatok)-1) to (abs(kinec)+1) do begin xpromen:=-i; if dx=0 then begin ypromen:=i;xpromen:=0;end else ypromen:=xpromen*(dy/dx); if (sqr(xpromen-x)+sqr(ypromen-y))<(r*r) then begin perevirkaprobitosi:=true;break;end else perevirkaprobitosi:=false; end; end; end else begin {------------------------------------------------------------------------} if (dx>=0) and (dy>=0) then begin if y-r<0 then pochatok:=0 else pochatok:=y-r; if y+r<0 then kinec:=0 else kinec:=y+r; for i:=(pochatok-1) to (kinec+1) do begin ypromen:=i; if dy=0 then begin xpromen:=i;ypromen:=0;end else xpromen:=ypromen*(dx/dy); if (sqr(xpromen-x)+sqr(ypromen-y))<(r*r) then begin perevirkaprobitosi:=true;break;end else perevirkaprobitosi:=false; end; end else if (dx>=0) and (dy<=0) then begin if y+r>0 then pochatok:=0 else pochatok:=y+r; if y-r>0 then kinec:=0 else kinec:=y-r; for i:=abs(pochatok-1) to abs(kinec+10) do begin ypromen:=-i; if dy=0 then begin xpromen:=i;ypromen:=0;end else xpromen:=ypromen*(dx/dy); if (sqr(xpromen-x)+sqr(ypromen-y))<(r*r) then begin perevirkaprobitosi:=true;break;end else perevirkaprobitosi:=false; end; end else if (dx<=0) and (dy>=0) then begin if y-r<0 then pochatok:=0 else pochatok:=y-r; if y+r<0 then kinec:=0 else kinec:=y+r; for i:=(pochatok-1) to (kinec+1) do begin ypromen:=i; if dy=0 then begin xpromen:=i;ypromen:=0;end else xpromen:=ypromen*(dx/dy); if (sqr(xpromen-x)+sqr(ypromen-y))<(r*r) then begin perevirkaprobitosi:=true;break;end else perevirkaprobitosi:=false; end; end else begin if y+r>0 then pochatok:=0 else pochatok:=y+r; if y-r>0 then kinec:=0 else kinec:=y-r; for i:=abs(pochatok-1) to abs(kinec+1) do begin ypromen:=-i; if dy=0 then begin xpromen:=-i;ypromen:=0;end else xpromen:=ypromen*(dx/dy); if (sqr(xpromen-x)+sqr(ypromen-y))<(r*r) then begin perevirkaprobitosi:=true;break;end else perevirkaprobitosi:=false; end; end; {------------------------------------------------------------------------} end; end; begin read(kilk); read(dx,dy); for j:=1 to kilk do begin read(xk,yk,rk); koefficient:=10000 div rk; xk:=xk*koefficient;yk:=yk*koefficient;rk:=rk*koefficient; if perevirkaprobitosi(xk,yk,rk) then inc(kilkprobitix); end; writeln(kilkprobitix); end.
15 балов. Некоторые тесты не прошли по времени, но если заменить в строке koefficient:=10000 div rk; число 10000 на 1000, задача берет 20 баллов. Обидно, да.
Поза форумом
2 LeonID (попереднє повідомлення).
Такий підхід радує тим, що не опускаєте руки і намагаєтесь хоч якось все-таки розв'язати задачу. Але в усіх інших смислах не радує зовсім.
По-перше, "еталонний" розв'язок не містить перебору координат, а лише один-єдиний цикл перебору всіх кульок (звісно, не рахуючи цикла на введення вхідних даних). Рішення про те, пробита вона чи ні, приймається на основі (зокрема, але не тільки) обчислення відстані від точки (центру кульки) до прямої (продовження променю).
По-друге, чотири майже однакових, але все-таки різних не дуже маленьких шматочки програми -- то не є добре. Кожен раз, коли бачимо, що щось було не так і його треба справити, доводиться справляти його у чотирьох місцях. І тут дуже легко заплутатися: у двох дійсно справити, третій взагалі пропустити (випадково промахнувся переводячи курсор), а в четвертому поміняти, але не так як треба. І потім можна дуже довго шукати помилку...
pilya написав:
Обидно когда даже в первом туре допускается проверка на простоту таким не опимизированным методом. Я думаю жури следует задуматься. Программа как минимум выполняется раза в 2-а медленее чем у guest1.
Журі категорично не ставить за мету обов'язково відсікати розв'язки, швидкість яких відрізняється у два рази -- не лише на 1-му турі, а й на інших. Якби ми ставили за мету обов'язково відсікати розв'язки, удвічі повільніші за найкращий, вийшло б, що для кожної задачі необхідно індивідуально дослідити яку мову програмування краще використати і які повиставляти директиви/ключі компілятору. Щось мені підказує, що ні учасникам таке не_сподобалося б, ні журі не_відчуває такої потреби.
А от асимптотично неефективні розв'язки, наприклад, перевірка простоти циклом до самого числа, а не до кореня
dn := 0; for p:=1 to i do if i mod p = 0 then dn := dn + 1; if dn=2 then ...{просте}...
як правило набирають не повні бали навіть у першому турі.
Це звісно не означає, ніби робити дрібні оптимізації (які пришвидшують не асимптотично, а на скількись-там відсотків) зовсім не треба. Можливо, вони й вплинуть на те, чи вкладеться програма в обмеження часу (особливо якщо велика кількість таких дрібних оптимізацій сумарно дає пришвидшення скажімо у 5 разів). А можливо й ні (особливо, якщо йдеться не про 2 рази, а лише про 20--50%%). Конкретно при коефіцієнті 2... тяжко сказати, від чого більше тут залежить -- від свідомої волі журі чи від випадку.
Відредаговано Ilya Porublyov (2009-11-29 08:29:57)
Поза форумом
Ilya Porublyov написав:
Журі категорично не ставить за мету обов'язково відсікати розв'язки, швидкість яких відрізняється у два рази -- не лише на 1-му турі, а й на інших.
Спасибо за ответ возможно это поможет не очень заморачиваться во втором туре .
И когда же наконец появятся задачи второго тура? и статистика чтот замолчала? Вчера до 24:00 было проверено аж три задачи, а за ночь ни одной.
Поза форумом
pilya написав:
И когда же наконец появятся задачи второго тура? и статистика чтот замолчала? Вчера до 24:00 было проверено аж три задачи, а за ночь ни одной.
Жюри ночью спали))
Відредаговано Loginf (2009-11-29 10:08:42)
Поза форумом
По поводу ТЛ - дело запутанное, всегда так было, и всегда будет.
У меня претензии к тестам по задаче Radars:
#include<algorithm> #include<iostream> using namespace std; int N; int A[100000]; int main(){ cin>>N; for(int i = 0; i < N ; i++) cin>>A[i]; int L = *min_element(A,A+N); int R = *max_element(A,A+N); int M0 = (L+R)/2;// - очевидный баг! int M = L; for(int i = 0 ; i < N ; i++) if( abs(M0-A[i]) < abs(M0-M) ) M = A[i]; cout<< ((long long)(R-M))*(M-L) <<endl; return 0; }
- вот это решение проходит все тесты. Придумать тест на котором оно валится очень просто. К примеру 3(кол-во чисел) 1 3 4.
Баг, имхо, очень ожидаемый и популярный :) и то что нету теста "на него" меня огорчает...
Поза форумом