|
|
вернуться в форумОбщий форумTO EVERYBODY: I will give any 2-6 AC-prorgrams of problems that I've solved to anybody who can give me AC-prorgrams of one(or more) of these problems:1065,1109,1111. My-email: nsc2001@rambler.ru COME ONE, GUYS STOP DOING THIS! (+) Can't you just ask for idea - not solution! I have solved each of these problems, and I'll be glad to help you with any of them, without asking anything in return! But program exchange is really wierd and useless! Sorry, I say not that I really want to say. Of course, I don't need code, I only need some hints(or main idea) > Can't you just ask for idea - not solution! I have solved each of > these problems, and I'll be glad to help you with any of them, > without asking anything in return! But program exchange is really > wierd and useless! P.S. : Please, give me an idea of problem 1159 (My solution get WA)...(+) ..Or find test where my program failed. Program t1159;{$N+} Const MaxN = 100; Change = 180/Pi; OkW = 360.0; Eps = 1E-15; Eps2 = 1E-1; Var Block : array[1..MaxN]of integer; N,i,sum,max : integer; mx,t : integer; left,rigth : extended; middle,pk : extended; curW,p : extended; ok : boolean; label AAA; Function GetLW(R : extended;L : integer) : extended; Var cosw,w,tgw : extended; begin cosw:=(2*R*R-L*L)/(2*R*R); if cosw=0 then w:=90 else begin tgw:=sqrt(1-cosw*cosw)/cosw; w:=ArcTan(tgw)*Change; if w<0 then w:=180+w; end; GetLW:=w; end; Function GetW(R : extended) : extended; Var w : extended; j : integer; begin w:=0; for j:=1 to N do w:=w+GetLW(R,Block[j]); GetW:=w; end; Function GetS(R : extended) : extended; Var Ans,p,S : extended; i : integer; begin Ans:=0; for i:=1 to N do begin p:=(2*R+Block[i])/2; S:=sqrt(abs(p*(p-R)*(p-R)*(p-Block[i]))); Ans:=Ans+S; end; GetS:=Ans; end; Procedure WriteAns(R : extended); begin Writeln(GetS(R):0:2); Halt(0); end; Procedure WriteAns2(R : extended); Var S,p : extended; begin p:=(R+R+Block[N+1])/2; S:=sqrt(p*(p-R)*(p-R)*(p-Block[N+1])); Writeln(GetS(R)-S:0:2); Halt(0); end; begin Read(N); sum:=0; max:=0; for i:=1 to N do Read(Block[i]); for i:=1 to N do begin sum:=sum+Block[i]; if Block[i]>max then begin max:=Block[i]; mx:=i; end; end; if mx<>N then begin t:=Block[mx]; Block[mx]:=Block[N]; Block[N]:=t; end; if max>=sum-max then begin Block[N]:=1; Writeln('0.00'); Halt(0); end; pk:=max/2; left:=pk; rigth:=sum; While True do begin middle:=(left+rigth)/2; curW:=GetW(middle); if curW<OkW then rigth:=middle else left:=middle; if rigth-left<Eps then break; end; if abs(curW-OkW)<Eps2 then WriteAns(middle); N:=N-1; left:=pk; rigth:=1E10; While True do begin middle:=(left+rigth)/2; curW:=GetW(middle); if curW>GetLW(middle,Block[N+1]) then rigth:=middle else left:=middle; if rigth-left<Eps then break; end; if abs(GetW(middle)-GetLW(middle,Block[N+1]))<Eps2 then writeans2 (middle); end. A test for you (+) Try this test case: 4 1 2 3 5 The correct answer is 4.44 Good luck! Thank you very much for your help !!! I get AC. As you can see I changed only 2 bytes of my code! Thank YOU!!!!!!! > Try this test case: > 4 > 1 > 2 > 3 > 5 > The correct answer is 4.44 > > Good luck! |
|
|