На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Что-то уже день прошёл, а темы всё нет ![]()
Впрочем, что тут обсуждать... Задачи-то лёгкие.
UPD: 100/100.
NewIllusion:
program NewIllusion;
var N, K: longint;
function Transmute(value: longint): longint;
begin
if value > 31 then Transmute:=sqr(value) div 100
else Transmute:=sqr(value) div 10;
end;
begin
read(N, K);
while K > 0 do begin
N:=Transmute(N);
dec(K);
if (N = 10) or
(N = 12) or
(N = 14) or
(N = 19) or
(N = 36) then break;
end;
if (K = 0) or (N = 10) then begin
write(N);
halt;
end;
K:=K mod 4;
while K > 0 do begin
N:=Transmute(N);
dec(K);
end;
write(N);
end.Tangent:
{$N+}
program tangent;
type current = extended;
function DistX(px1, py1, px2, py2: current): current;
begin
DistX:=sqrt(sqr(px1 - px2) + sqr(py1 - py2));
end;
var x1, y1, r1, x2, y2, r2, tm: longint;
dsx: current;
begin
read(x1, y1, r1, x2, y2, r2);
dsx:=DistX(x1, y1, x2, y2);
if dsx > r1 + r2 then begin write(4); halt; end;
if dsx = r1 + r2 then begin write(3); halt; end;
if (x1 = x2) and (y1 = y2) and (r1 = r2) then begin write(7); halt; end;
if r1 < r2 then begin tm:=r1; r1:=r2; r2:=tm; end;
if dsx + r2 < r1 then begin write(0); halt; end;
if dsx + r2 = r1 then begin write(1); halt; end;
write(2);
end.Lazer:
{$N+}
program Lazer;
type current = extended;
var N, i, dx, dy, cx, cy, cr, rex: longint;
koef: current;
function Direction(px, py: current): longint;
begin
if px < 0 then begin
if py < 0 then Direction:=1;
if py = 0 then Direction:=2;
if py > 0 then Direction:=3;
end;
if px = 0 then begin
if py < 0 then Direction:=4;
if py = 0 then Direction:=5;
if py > 0 then Direction:=6;
end;
if px > 0 then begin
if py < 0 then Direction:=7;
if py = 0 then Direction:=8;
if py > 0 then Direction:=9;
end;
end;
function Destroys: boolean;
var funcRes: boolean;
ctx, qa, qb, qx, qy: current;
begin
funcRes:=false;
if dx = 0 then begin
if (abs(cx) < cr) and ((dy >= 0) = (cy >= 0)) then funcRes:=true;
end else begin
qa:=1 + sqr(koef);
qb:=-2 * (cy * koef + cx);
ctx:=sqr(qb) - 4 * qa * (sqr(cx) + sqr(cy) - sqr(cr));
if ctx > 0 then begin
funcRes:=true;
if ((dy >= 0) <> (cy >= 0)) and
((dx >= 0) <> (cx >= 0)) then funcRes:=false;
qx:=(sqrt(ctx) - qb) / (2 * qa);
qy:=koef * qx;
if Direction(dx, dy) <> Direction(qx, qy) then funcRes:=false;
end;
end;
Destroys:=funcRes;
end;
begin
read(N, dx, dy); rex:=0;
if dx <> 0 then koef:=dy / dx;
for i:=1 to N do begin
read(cx, cy, cr);
if Destroys then inc(rex);
end;
write(rex);
end.Radars:
program Radars;
const nmax = 100000;
var i, N, mi, ma: longint;
arr: array[1..nmax] of longint;
maxval, curval, tempval: int64;
begin
read(N); read(arr[1]);
mi:=arr[1]; ma:=arr[1]; maxval:=0;
for i:=2 to N do begin
read(arr[i]);
if mi > arr[i] then mi:=arr[i];
if ma < arr[i] then ma:=arr[i];
end;
for i:=1 to N do begin
curval:=ma - arr[i];
tempval:=arr[i] - mi;
curval:=curval * tempval;
if maxval < curval then maxval:=curval;
end;
write(maxval);
end.Lotto:
program Lotto;
var i, j, N, M: longint;
function GradeX(value, grade: longint): longint;
var funcRes, xI: longint;
begin
funcRes:=1;
for xI:=1 to grade do funcRes:=funcRes * value;
GradeX:=funcRes;
end;
function PrimeX(value: longint): boolean;
var funcRes, ts: boolean;
xI: longint;
begin
funcRes:=true; ts:=true; xI:=5;
if (value mod 2 = 0) or (value mod 3 = 0) then funcRes:=false else begin
while xI <= trunc(sqrt(value)) do begin
if value mod xI = 0 then begin
funcRes:=false;
break;
end;
if ts then inc(xI, 2)
else inc(xI, 4);
ts:=not ts;
end;
end;
if value < 13 then begin
if (value = 2) or (value = 3) or (value = 5) or (value = 7) or
(value = 11) then funcRes:=true else funcRes:=false;
end;
PrimeX:=funcRes;
end;
begin
read(N);
if PrimeX(N * 10 + 1) then begin write(N * 10 + 1); halt; end;
if PrimeX(N * 10 + 3) then begin write(N * 10 + 3); halt; end;
if PrimeX(N * 10 + 7) then begin write(N * 10 + 7); halt; end;
if PrimeX(N * 10 + 9) then begin write(N * 10 + 9); halt; end;
for i:=1 to maxlongint do
for j:=0 to GradeX(10, i) - 1 do begin
M:=N * GradeX(10, i) + j;
if PrimeX(M * 10 + 1) then begin write(M * 10 + 1); halt; end;
if PrimeX(M * 10 + 3) then begin write(M * 10 + 3); halt; end;
if PrimeX(M * 10 + 7) then begin write(M * 10 + 7); halt; end;
if PrimeX(M * 10 + 9) then begin write(M * 10 + 9); halt; end;
end;
end.Відредаговано guest1 (2009-11-29 19:02:26)
Поза форумом
Вот мои, хоть и не успел отправить ни одной задачи
Newillusion
#include <stdio.h>
int n;
long t, k;
int a[90]={10, 12, 14, 16, 19, 22, 25, 28, 32, 36, 40, 44, 48, 52, 57, 62, 67, 72, 78, 84, 90, 96, 10, 10, 11, 12, 12, 13, 14, 15, 16, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 49, 50, 51, 53, 54, 56, 57, 59, 60, 62, 64, 65, 67, 68, 70, 72, 73, 75, 77, 79, 81, 82, 84, 86, 88, 90, 92, 94, 96, 98};
int main()
{
scanf("%d%ld", &n, &k);
for(t=0; t<k; t++, n = a[n-10]);
printf("%d", n);
return 0;
}Tangent
#include <stdio.h>
#include <math.h>
long X1, Y1, R1, X2, Y2, R2;
float d;
int main()
{
scanf("%ld%ld%ld%ld%ld%ld", &X1, &Y1, &R1, &X2, &Y2, &R2);
if(X1==X2 && Y1==Y2 && R1==R2)
printf("%d", 7); else
{
d=sqrt(pow(X2-X1,2)+pow(Y2-Y1,2));
if(fabs(d-R1-R2)<0.0000001) printf("%d", 3); else
if(d>R1+R2)printf("%d", 4);else
if(fabs(d-abs(R1-R2))<0.0000001) printf("%d", 1);else
if(d<abs(R1-R2)) printf("%d", 0);else
printf("%d", 2);
}
return 0;
}Lazer
#include <stdio.h>
#include <math.h>
int i, n, dx, dy, x, y, r;
int c=0;
float d;
int main()
{
scanf("%d%d%d", &n, &dx, &dy);
d=sqrt(pow(dx,2)+pow(dy,2));
for(i=0; i<n; i++)
{
scanf("%d%d%d", &x, &y, &r);
if(dx*x+dy*y>0 && abs(dy*x - dx*y)/d<r) c++;
}
printf("%d", c);
return 0;
}Radars
#include <stdio.h>
#include <math.h>
long i, n, min, max, avr, sum, a[100000];
double m1, m2;
int main()
{
scanf("%ld%ld", &n, &a[0]);
avr = min = max = a[0];
for(i=1; i<n; i++)
{
scanf("%ld", &a[i]);
if(a[i]<min) min = a[i]; else
if(a[i]>max) max = a[i];
}
sum = min+max;
for(i=1; i<n; i++)
if(abs(sum-2*a[i])<abs(sum-2*avr)) avr = a[i];
m1 = max - avr;
m2 = (avr - min)*m1;
printf("%.0f", m2);
return 0;
}Lotto
#include <stdio.h>
#include <math.h>
long i, n, k;
long simple(long N, long I)
{
for(k=0; I>0; k=k*10+I%10, I/=10);
while(k>0)
{
N=N*10+k%10;
k/=10;
}
for(k=2; k<=sqrt(N) && N%k>0; k++);
if(k>sqrt(N))
return N; else
return 0;
}
int main()
{
scanf("%ld", &n);
for(i=1; simple(n, i)==0; i++);
printf("%ld", simple(n,i));
return 0;
}Відредаговано Andrey (2009-11-28 22:25:41)
Поза форумом
Хоть и не идеальные решения..но всёже)
program Newillusion; var n,i:integer; K:longint; begin readln(n,k); for i:=1 to k do begin n:=n*n; if n>1000 then n:=n div 100 else n:=n div 10; end; writeln(n); end.
program Tangent;
var x1,y1,r1,x2,y2,r2:longint; l:real;k:integer;
begin
read(x1,y1,r1,x2,y2,r2);
l:=sqrt(sqr(x1-x2)+sqr(y1-y2));
if l>r1+r2 then K:=4 else
if l=r1+r2 then k:=1 else
if (r1>l+r2)or(r2>l+r1) then k:=0 else
if (r1=l+r2)or(r2=l+r1) then k:=1 else
if l<r1+r2 then k:=2;
writeln(k);
end.program Lazer;
var a:array[1..1000,1..3] of integer;
k,dx,dy,n,i:integer; l:real; x,y:boolean;
begin
read(n,dx,dy); K:=0;x:=false;y:=false;
if dx>=0 then x:=true; if dy>=0 then y:=true;
for i:=1 to n do read(a[i,1],a[i,2],a[i,3]);
for i:=1 to n do begin
l:=(sqr(2*a[i,1]+2*a[i,2]*dy/dx))-4*(sqr(dy/dx)+1)*(sqr(a[i,1])+sqr(a[i,2])-sqr(a[i,3]));
if (l>0.01)and((((2*a[i,1]+2*a[i,2]+sqrt(l))/(2*sqr(dy/dx))>0)and(x))or((((2*a[i,1]+2*a[i,2]+sqrt(l))/(2*sqr(dy/dx))<0)
and(not x)))) then
k:=k+1; end;
writeln(k);
end.program Radars;
var i,l,p1,p2,amax,amin,k,n:longint;c:boolean;
a:array[1..16199] of longint;
begin
read(n); amax:=-1000001; amin:=1000001;
for i:=1 to n do begin read(a[i]);
if a[i]>=amax then amax:=a[i];
if a[i]<=amin then amin:=a[i];end;
k:=(amin+amax) div 2;
for i:=k downto amin+1 do begin
c:=false;
for l:=1 to n do
if a[l]=i then begin p1:=(amax-i)*(i-amin);c:=true;break;end;
if c=true then break;end;
for i:=k+1 to amax-1 do begin
c:=false;
for l:=1 to n do
if a[l]=i then begin p2:=(amax-i)*(i-amin);c:=true;break;end;
if c=true then break;end;
if p1>=p2 then writeln(p1) else writeln(p2);
end.program Lotto;
var n,k,i,l:longint;e:boolean;r,t:string;s:integer;
begin
readln(r);L:=1;val(r,n,s);
for i:=n*10+1 to n*round(exp((9-length(r))*ln(10))) do begin
str(i,t);
if r=copy(t,1,length(r)) then
if i mod 2=1 then begin
e:=false;
for k:=2 to (i div 2)+1 do
if (i mod k=0) then begin e:=true;break;end;
if not e then begin writeln(i);break;end;
end;end;
end.Поза форумом
Loginf написав:
Хоть и не идеальные решения..но всёже)
В Тангете не рассмотрел вариант одинаковых координат и радиусов ![]()
Поза форумом
lotto
var a,chis,i,k,chislik,code:longint;
flag:boolean;
dobavka,nachatka,rezutka:string;
function perevirkanaprostotu(chislo:longint):boolean;
var i:longint;
begin
perevirkanaprostotu:=true;
for i:=2 to round(sqrt(chislo))do
if chislo mod i=0 then begin
perevirkanaprostotu:=false;
break;
end;
end;
begin
read(chis);
flag:=true;
k:=10;
while(flag)do begin
k:=k+1;
str(k,dobavka);
delete(dobavka,1,1);
str(chis,nachatka);
rezutka:=nachatka+dobavka;
val(rezutka,chislik,code);
if (perevirkanaprostotu(chislik))then begin
flag:=false;
break;
end;
end;
writeln(chislik);
end.Поза форумом
А может быть не стоит выкладывать решения, если неизвестно, правильны ли они?
Поза форумом
Как запустят онлайн проверку, я напишу сколько балов у меня каждая набрала)
Поза форумом
radars, без int64
var a:array[0..100000]of longint;
var b,chis1,chis2,c:array[0..100000]of longint;
var n,koor,i,k,vidstan,mnoznik1,mnoznik2,minimum,p,dovzina1,dovzina2,j:longint;
var potuz,delta,maximum:longint;
begin
for i:=0 to 100000 do a[i]:=0;
for i:=0 to 100000 do b[i]:=0;
minimum:=1000000000;maximum:=-1000000000;delta:=1000000000;
read(n);
for i:=1 to n do begin
read(koor);
a[i]:=koor;
if minimum>koor then minimum:=koor;
if maximum<koor then maximum:=koor;
end;
for i:=1 to n do begin
vidstan:=abs(abs(a[i]-minimum)-abs(a[i]-maximum));
if delta>vidstan then begin
delta:=vidstan;
mnoznik1:=abs(a[i]-minimum);
mnoznik2:=abs(a[i]-maximum);
end;
end;
k:=0;
while(mnoznik1<>0)do begin
k:=k+1;
b[k]:=mnoznik1 mod 10;
mnoznik1:=mnoznik1 div 10;
end;
p:=1;
for i:=k downto 1 do begin
p:=p+1;
chis1[p]:=b[i];
end;
chis1[1]:=0;
dovzina1:=p;
k:=0;
while(mnoznik2<>0)do begin
k:=k+1;
b[k]:=mnoznik2 mod 10;
mnoznik2:=mnoznik2 div 10;
end;
p:=0;
for i:=k downto 1 do begin
p:=p+1;
chis2[p]:=b[i];
end;
dovzina2:=p;
for i:=1 to dovzina2 do begin
for j:=1 to chis2[i] do
for k:=dovzina2+dovzina1 downto 2 do begin
c[k]:=c[k]+chis1[k];
if c[k]>=10 then begin
c[k]:=c[k]-10;
c[k-1]:=c[k-1]+1;
end;
end;
for k:=dovzina2+dovzina1 downto 2 do chis1[k]:=chis1[k-1];
end;
if c[1]=0 then k:=2 else k:=1;
for i:=k to dovzina2+dovzina1-1 do write(c[i]);
writeln;
end.Поза форумом
Кстати, guest1, как ты догадался, что период повтора в NewIllusion всегда 4? Додумался, или пришёл к этому опытным путём?
Поза форумом
newilluzion
var chis,chis1,kilper,i,period,numer,chislo,zalish:longint;
begin
read(chis1);
read(kilper);
chislo:=chis1;
chis:=chis1;
period:=0;
for i:=1 to 100 do begin
chis:=chis*chis;
if chis>999 then
chis:=chis div 100 else
chis:=chis div 10;
if chis=12 then begin period:=i;numer:=12;break;end;
if chis=10 then begin period:=i;numer:=10;break;end;
end;
if period>kilper then begin
for i:=1 to kilper do begin
chislo:=chislo*chislo;
if chislo>999 then
chislo:=chislo div 100 else
chislo:=chislo div 10;
end;
writeln(chislo);
end
else
if numer=10 then writeln(10) else begin
zalish:=kilper-period;
zalish:=zalish mod 4;
if zalish=0 then write(12);
if zalish=1 then write(14);
if zalish=2 then write(19);
if zalish=3 then write(36);
end;
end.Поза форумом
Silicious Man написав:
Кстати, guest1, как ты догадался, что период повтора в NewIllusion всегда 4? Додумался, или пришёл к этому опытным путём?
LeonID, тебя вопрос тоже касается ![]()
Поза форумом
А хотя всё, теперь ясно … ![]()
я делал сложнее
Поза форумом
Silicious Man написав:
Silicious Man написав:
Кстати, guest1, как ты догадался, что период повтора в NewIllusion всегда 4? Додумался, или пришёл к этому опытным путём?
LeonID, тебя вопрос тоже касается
Я сразу допустил, что период какой-то есть. Потом при поисках этого периода обнаружил что он равен 4(при 12) и 1(при 10).
Поза форумом
Да, а я вот не догадался, что оно всегда к этим нескольким числам приходит
и написал динамический поиск периода ![]()
Поза форумом
tangent
var x1,y1,x2,y2,r1,r2:longint;
vidstmizcentr,x11,y11,x12,y12:extended;
begin
read(x1,y1,r1,x2,y2,r2);
x11:=x1;y11:=y1;x12:=x2;y12:=y2;
vidstmizcentr:=sqrt(sqr(x12-x11)+sqr(y12-y11));
if r2>=r1 then begin
if abs(vidstmizcentr-(r1+r2))<0.0000000001 then writeln(3) else
if vidstmizcentr>(r1+r2)then writeln(4) else
if (x1=x2)and(y1=y2)and(r1=r2)then writeln(7)else
if abs((vidstmizcentr+r1)-r2)<0.0000000001 then writeln(1) else
if (vidstmizcentr+r1)<r2 then writeln(0) else
writeln(2);
end else begin
if abs(vidstmizcentr-(r1+r2))<0.0000000001 then writeln(3) else
if vidstmizcentr>(r1+r2)then writeln(4) else
if abs((vidstmizcentr+r2)-r1)<0.0000000001 then writeln(1) else
if (vidstmizcentr+r2)<r1 then writeln(0) else
writeln(2);
end;
end.Поза форумом
Получается, я единственный, кто рассматривал вариант нулевой окружности в задаче Tangent? ![]()
Поза форумом
Silicious Man написав:
Получается, я единственный, кто рассматривал вариант нулевой окружности в задаче Tangent?
Я верю википедии)
Поза форумом
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.Поза форумом
О, по предварительным результатам по крайней мере третья и пятая у меня полностью верны ![]()
Поза форумом
NewIllusion:
#include <iostream>
using namespace std;
int main()
{
int n,k,i;
int a[100]={0,0,0,0,0,0,0,0,0,0,10,12,14,16,19,22,25,28,32,36,40,44,48,52,57,62,67,72,78,84,90,96,10,10,11,12,12,13,14,15,16,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,42,43,44,46,47,49,50,51,53,54,56,57,59,60,62,64,65,67,68,70,72,73,75,77,79,81,82,84,86,88,90,92,94,96,98};
int d[100]={0,0,0,0,0,0,0,0,0,0,1,0,4,0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
cin>>n>>k;
while((d[n]==0)&&(k>0))
{
n=a[n];
k--;
}
if(d[n]!=0)k%=d[n];
for(i=0;i<k;i++) n=a[n];
cout<<n<<endl;
return 0;
}Відредаговано Слава (2009-11-29 17:57:00)
Поза форумом
Мое "усложненное" решение задачи lazer недобрало 5 балов (я это чувствовал).
Поза форумом
Хех, хоть с страницы сайта запустить проверку задач нельзя, но по ссылке http://www2.olymp.vinnica.ua/cgi-bin/v_ … nguage=ukr работает на 3ей и 5ой задаче на всех тестах)
Відредаговано Loginf (2009-11-28 23:35:16)
Поза форумом
Lazer: (20 из 20)
#include<iostream>
#include<math.h>
using namespace std;
struct Point
{
double x,y;
};
struct O:public Point
{
double r;
};
Point per(Point A, Point B, Point C)
{
Point D;
Point F;
F.x = C.x - (B.y - A.y);
F.y = C.y + (B.x - A.x);
double k2 = ((C.x-A.x)*(B.y-A.y) - (B.x-A.x)*(C.y-A.y))/
((B.x-A.x)*(F.y-C.y) - (F.x-C.x)*(B.y-A.y));
D.x = (F.x-C.x)*k2 + C.x;
D.y = (F.y-C.y)*k2 + C.y;
return(D);
}
double dist(double x1,double y1,double x2,double y2)
{
double dx=x1-x2,dy=y1-y2;
return sqrt(dx*dx+dy*dy);
}
int main()
{
O a;
double dx,dy;
int n,i,k=0;
cin>>n>>dx>>dy;
Point A={0,0},B={dx,dy};
for(i=0;i<n;i++)
{
cin>>a.x>>a.y>>a.r;
Point C={a.x,a.y},D;
D=per(A,B,C);
if(dist(D.x,D.y,a.x,a.y)<a.r)
if(D.x*dx>=0 && D.y*dy>=0)
k++;
}
cout<<k<<endl;
return 0;
}Поза форумом
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;
}Поза форумом