var a : array[-1000..0] of integer; b : array[0..1000] of integer; n, i, j, k, l, m, u, x : integer; c : array[1..100] of integer; begin read(n, x); k := 0; m := 0; l := 0; u := 0; j := 0; i := 0; for i := 1 to n do begin read(c[i]); if c[i] >= 0 then b[c[i]] := 1 else a[c[i]] := 1; end; if b[0] = 1 then u := 1; if x = 0 then begin k := 0; m := 0; end; if x < 0 then begin for i := x to -1 do begin if a[i] = 1 then begin u := 1; break; end; end; if i = 0 then begin for j := 0 downto x do begin inc(m); end; m := m - 1; repeat inc(k); until b[k] = 1; k := 2 * k + m; end; end; if x > 0 then begin for i := 0 to x do begin if(b[i]) = 1 then begin u := 1; break; end; end; if i = x + 1 then begin for j := 0 to x do begin inc(k); end; k := k - 1; repeat inc(m); dec(l); until a[l] = 1; m := 2 * m + k end; end; if u = 1 then writeln('Impossible') else writeln(k,' ', m); readln; readln; end. my code it is work for different numbers and tests (my tests( but WA 1) plese, who can help me? I solved this problem by emulation. I have WA 1 too. Problem was with calculation distance. They some times became negative. When i add function abs() for every places, where was calculation distances - i got AC Edited by author 18.10.2009 18:20 var a : array[-1000..0] of integer; b : array[0..1000] of integer; n, i, j, k, l, m, u, x : integer; c : array[1..100] of integer; begin read(n, x); k := 0; m := 0; l := 0; u := 0; j := 0; i := 0; for i := 1 to n do begin read(c[i]); if c[i] > 0 then b[c[i]] := 1 else a[c[i]] := 1; end; if x < 0 then begin for i := x to -1 do begin if a[i] = 1 then begin u := 1; break; end; end; if i = 0 then begin j := 0; while (k>x) do begin dec(k); end; k := abs(k); while (b[j]<>1) and (abs(j)<1000) do begin inc(m); inc(j); end; m := m * 2 + k; end; end; if x > 0 then begin for i := 0 to x do begin if(b[i]) = 1 then begin u := 1; break; end; end; if i = x + 1 then begin j := 0; while m < x do begin inc(m); end; while (a[j]<>1) and (abs(j)<1000) do begin inc(k); dec(j); end; k := k * 2 + m; end; end; if u = 1 then writeln('Impossible') else begin write(m,' ',k); end; readln;readln; end. correct my solution but WA1 it's very bad ((( who knows test 1? Edited by author 08.11.2009 14:04 all tests is right may be I wrong in output? can somebody help me and sorry for my bad english var a : array[-1000..0] of integer; b : array[0..1000] of integer; n, i, j, k, l, m, u, x : integer; c : array[1..100] of integer; begin read(n, x); k := 0; m := 0; l := 0; u := 0; j := 0; i := 0; for i := 1 to n do begin read(c[i]); if c[i] > 0 then b[c[i]] := 1 else a[c[i]] := 1; end; if x < 0 then begin for i := x to -1 do begin if a[i] = 1 then begin u := 1; break; end; end; if i = 0 then begin j := 0; while (k>x) do begin dec(k); end; k := abs(k); while (b[j]<>1) and (abs(j)<1000) do begin inc(m); inc(j); end; m := m * 2 + k; end; end; if x > 0 then begin for i := 0 to x do begin if(b[i]) = 1 then begin u := 1; break; end; end; if i = x + 1 then begin j := 0; while m < x do begin inc(m); end; while (a[j]<>1) and (abs(j)<1000) do begin inc(k); dec(j); end; k := k * 2 + m; end; end; if u = 1 then writeln('Impossible') else begin write(m,' ',k); end; readln;readln; end. correct my solution but WA1 it's very bad ((( who knows test 1? Edited by author 08.11.2009 14:04 Your code is very crazy :) 1. He get wrong answer for demo test 2. if x < 0 then begin for i := x to -1 do begin (*) if a[i] = 1 then begin u := 1; break; end; end; if i = 0 then begin (**) How do you think - it is possible to go get TRUE in condition (**) if cycle condition (**) is that? And the same bug in for i := 0 to x do begin (*) if(b[i]) = 1 then begin u := 1; break; end; end; if i = x + 1 then begin (**) More help only via e-mail. Edited by author 08.11.2009 15:55Thank you ))) I am thinking and rewriting me programm for 10 minutes now ))) and got AC it's amazing ))) Hi, Where does our legendary 1D person starts his journey from ? What are the coordinates of his home / point ? Thanks A citation from condition: "1D person is located at the origin." Origin is the origin of the coordinates. var a:array [1..100] of integer; n,x,i,j,m,x1,x2,min1,min2:integer; begin readln(n,x); m:=0; min1:=maxint; min2:=maxint; for i:=1 to n do begin read(a[i]); if (a[i]>x)and(a[i]<0) then begin writeln('Impossible'); readln; halt; end; if (a[i]<x)and(a[i]>0) then begin writeln('Impossible'); readln; halt; end; if (a[i]>0)and(a[i]<min1) then begin min1:=a[i]; end; if (a[i]<0)and(a[i]<min2) then begin min2:=a[i]; end; end; if (x<0)and(min1=maxint) then begin writeln(abs(x),' ',abs(x)); readln; halt; end; if (x>0)and(min2=maxint) then begin writeln(abs(x),' ',abs(x)); readln; halt; end; if x<0 then begin x1:=(min1*2)+abs(x); x2:=abs(x); end; if x>0 then begin x1:=x; x2:=(abs(min2)*2)+x; end; if x=0 then begin x1:=0; x2:=0; end; writeln(x1,' ',x2); readln; end. I can't understand what is wrong here? Edited by author 16.03.2009 19:29 Can anyone give me some tests??? i can give you my ac solution I can't understand why... Please, help! My algo : sort(x, x + n);
int fp = 0; while (x[fp] < 0) ++fp;
int fn = fp - 1;
if (!(x[fn] <= p && p <= x[fp])) { printf("Impossible\n"); return 0; }
if (p > 0) { if (x[fp] > p) { printf("%d ", p); } else { printf("Impossible\n"); return 0; } } else { if (x[fn] > p) { printf("Impossible\n"); return 0; } else { printf("%d ", (2 * x[fp] - p)); } }
if (p < 0) { if (x[fn] > p) { printf("Impossible\n"); return 0; } else { printf("%d\n", (-p)); } } else { if (x[fp] < p) { printf("Impossible\n"); return 0; } else { printf("%d\n", (p - 2 * x[fn])); } } give your mail i show you 2 variants ... mikroz@gmail.com thanks =) mikroz@gmail.com thanks =) Sended My algo: uses SysUtils; var ex: Integer; Prep: integer; i, k: integer; Imposs: boolean = false; MinP: integer; MaxP: integer; fir ,sec: integer; begin // Readln( prep, ex ); MinP:= -1000; MaxP:= +1000; if Prep > 0 then for i:= 1 to prep do begin Readln( k ); if ( k < 0 ) and ( k > MinP ) then MinP:= k; if ( k > 0 ) and (k < MaxP ) then MaxP:= k; if ( ( ex > 0 ) and ( MaxP < ex ) ) or ( ( ex < 0 ) and ( MinP > ex ) ) then Imposs:= true; end; // for if not Imposs then begin if Ex > 0 then begin Fir:= Ex; Sec:= 2 * Abs( MinP ) + Ex; end else if Ex < 0 then begin Fir:= 2 * MaxP + Abs( Ex ); Sec:= Abs( Ex ); end; end; if not Imposs then Writeln( Fir, ' ', Sec ) else Writeln( 'Impossible' ); // end. wrong answer in test 1! Will u please give me some examples... cant understand what is wrong. #include<iostream> using namespace std; void bsort(int a[], int size) { register int i, j; int x; for(i=0;i<size;i++) { for(j=size-1;j>i;j--) { if(a[j-1]>a[j]) { x=a[j-1]; a[j-1]=a[j]; a[j]=x; } } } } struct { int x,y; } moves,border; int main(){ int n,x,i; cin >> n >> x; int* data = new int[n]; for(i=0;i<n;i++){ cin >> data[i]; } bsort(data,n); border.x = data[0]; border.y = data[n-1]; for(int i=1;i<n;i++){ if(data[i]>=x){ border.x = data[i-1]; break; } } for(int i=n-1;i>=0;i--){ if(data[i]<=x){ border.y = data[i+1]; break; } } if( (x<0 && border.x>x) || (x>0 && border.y<x) ){ cout << "Impossible"; return 0; } if(x<0){ moves.x = (-1)*x; moves.y = moves.x + border.y*2; } else if(x>0){ moves.y = x; moves.x = moves.y + (-1)*border.x*2; } cout << moves.y << " " << moves.x; return 0; } TO ADMINS How n can can be <=0 n<=0 TEST PLEASE Edited by author 25.10.2008 18:05 |
|