На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Что-то уже день прошёл, а темы всё нет
Впрочем, что тут обсуждать... Задачи-то лёгкие.
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; }
Поза форумом