57 条题解

  • 0
    @ 2010-04-13 22:47:09

    求根公式中 / 打成 * 居然能 过 7 组 , 汗……

  • 0
    @ 2009-11-08 21:59:42

    天哪,就没有少一点的程序吗……到时候比赛遇到这种问题要花多少时间啊……TAT(一个懒人的唠叨)

  • 0
    @ 2009-11-06 13:33:45

    AC 了

    刚开始时逐位处理,后来有时用for,正负号问题明显好解决le

    刚开始写了两个过程cal1,cal2,结果发现cal1对,cal2错,合并为calstr就OKl

    program p1646;

    type x=array[1..2] of longint;

    var str1,str2,str:string;

    k,a1,b1,c1,a2,b2,c2:longint;

    a,b,c:x;

    function firstcx(str:string;k:integer):boolean;

    var i:integer;

    begin

    for i:=k downto 1 do

    if (str[i]='x') or (str[i]='+') or (str[i]='-') then exit(false);

    exit(true);

    end;

    function firstc(str:string):boolean;

    var i:longint;

    begin

    if str[1]='-' then i:=2 else i:=1;

    while (str[i]'+') and (str[i]'-') and (i0 then writeln(x1:0:5,' ',x2:0:5);

    if a=3 then if (str='x') or ((str='x') and (str='^')) then

    else for j:=i-1 downto 1 do

    if str[j]='+' then begin c[p]:=c[p]+xs; xs:=0;break; end

    else if str[j]='-' then begin c[p]:=c[p]-xs; xs:=0;break; end;

    end;

    end;

    inc(i);

    end;

    if xs0 then

    begin

    for j:=k-1 downto 1 do

    if str[j]='+' then begin c[p]:=c[p]+xs; xs:=0; break; end

    else if str[j]='-' then begin c[p]:=c[p]-xs; xs:=0; break; end;

    end;

    end;

    begin

    init;

    calstr(str1,1); calstr(str2,2);

    if (a[1]-a[2]=0) and (b[1]-b[2]=0) and (c[1]-c[2]=0) then begin writeln('181818181818'); halt; end;

    if (a[1]-a[2]=0) and (b[1]-b[2]=0) and (c[1]-c[2]0) then begin writeln(0); halt; end;

    calroot(a[1]-a[2],b[1]-b[2],c[1]-c[2]);

    end.

  • 0
    @ 2009-11-02 22:03:26

    对于提交次数,我不想说什么了。。。

    看M.j.1646的提交次数。。。

    ---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|-

    Program P1646_NewVersion;

    Var i,j,k,l,n:Longint;

    a1,a2,a3,x1,x2,x3:Longint;

    a,b:string;

    Procedure PutOut;

    Var delta,ans1,ans2,tmp:real;

    Begin

    if a10 then

    begin

    delta:=sqr(a2)-4*a1*a3;

    if delta>0 then

    begin

    ans1:=(-a2+sqrt(delta))/(2*a1);

    ans2:=(-a2-sqrt(delta))/(2*a1);

    if ans1>ans2 then

    begin

    tmp:=ans1; ans1:=ans2; ans2:=tmp;

    end;

    writeln(2);

    if ans1=0 then ans1:=0;

    write(ans1:0:5,' ');

    if ans2=0 then ans2:=0;

    writeln(ans2:0:5);

    end

    else

    if delta=0 then

    begin

    ans1:=-a2/(2*a1);

    writeln(1);

    if ans1=0 then ans1:=0;

    writeln(ans1:0:5);

    end

    else

    writeln(0);

    end

    else

    begin

    writeln(1);

    ans1:=-a3/a2;

    if ans1=0 then ans1:=0;

    writeln(ans1:0:5);

    end;

    End;

    Procedure Deal;

    Var s1,s2:string;

    i1,i2,j1,j2:longint;

    Begin

    x1:=0; x2:=0; x3:=0;

    if b[1]'-' then b:='+'+b;

    //Deal with X^2;

    while pos('x^2',b)>0 do

    begin

    j:=pos('x^2',b);

    if j=0 then break;

    for j1:=j-1 downto 1 do

    if (b[j1]='-') or (b[j1]='+') then break;

    s1:=copy(b,j1+1,j-(j1+1));

    if s1='' then i1:=1 else val(s1,i1);

    if b[j1]='-' then x1:=x1-i1 else x1:=x1+i1;

    delete(b,j1,j+2-j1+1);

    end;

    //Deal with X^1;

    while pos('x',b)>0 do

    begin

    j:=pos('x',b);

    if j=0 then break;

    for j1:=j-1 downto 1 do

    if (b[j1]='-') or (b[j1]='+') then break;

    s1:=copy(b,j1+1,j-(j1+1));

    if s1='' then i1:=1 else val(s1,i1);

    if b[j1]='-' then x2:=x2-i1 else x2:=x2+i1;

    delete(b,j1,j-j1+1);

    end;

    //Deal with X^0;

    begin

    b:=b+'-';

    j:=length(b);

    while j>1 do

    begin

    j:=length(b);

    for j1:=2 to j do

    if ((b[j1]='+') or (b[j1]='-')) then break;

    s1:=copy(b,2,j1-2);

    val(s1,i1);

    if b[1]='+' then x3:=x3+i1 else x3:=x3-i1;

    delete(b,1,j1-1);

    end;

    end;

    End;

    Begin

    Readln(a);

    i:=pos('=',a);

    b:=copy(a,1,i-1);

    delete(a,1,i);

    Deal;

    a1:=x1; a2:=x2; a3:=x3;

    b:=a;

    deal;

    dec(a1,x1); dec(a2,x2); dec(a3,x3);

    if ((a1=0) and (a2=0) and (a3=0)) then writeln('181818181818') else

    if ((a1=0) and (a2=0) and (a30)) then writeln('0') else

    PutOut;

    End.

  • 0
    @ 2009-11-02 19:08:10

    编译通过...

    ├ 测试数据 01:运行超时...

    ├ 测试数据 02:运行超时...

    ├ 测试数据 03:运行超时...

    ├ 测试数据 04:运行超时...

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:运行超时...

    ├ 测试数据 07:运行超时...

    ├ 测试数据 08:运行超时...

    ├ 测试数据 09:运行超时...

    ├ 测试数据 10:运行超时...

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:10 有效耗时:0ms

    为什么超时阿 救命啊 写了1个多少小时阿

    var i,j,k,a,b,c,d,e1,e2,js,s11:longint;

    s,s1:string;

    x1,x2,de:real;

    begin

    readln(s);

    d:=pos('=',s);

    js:=length(s);

    a:=0; b:=0;c:=0;

    while ((d>1)and(pos('x',s)>0)) do

    begin

    e2:=pos('x^2',s);

    if (e20) then

    begin

    s1:='';

    for i:=e2-1 downto e2-4 do

    begin

    if (s[i]>='0')and(s[i]='0')and(s[i]1 then

    begin

    for i:=d-1 downto 1 do

    begin

    if (s[i]='-')or(s[i]='+') then

    begin

    s11:=0;

    val(copy(s,i+1,d-i-1),s11);

    if s[i]='-'then c:=c-s11 else c:=c+s11;

    delete(s,i,d-i);

    end;

    end;

    if pos('=',s)>1 then

    begin

    val(copy(s,1,d-1),s11);

    c:=c+s11;

    delete(s,1,d-1);

    end;

    end;

    delete(s,1,1);

    d:=length(s);

    while ((pos('x',s)>0) )do

    begin

    e2:=pos('x^2',s);

    if (e20) then

    begin

    s1:='';

    for i:=e2-1 downto e2-4 do

    begin

    if (s[i]>='0')and(s[i]='0')and(s[i]0 then

    begin

    for i:=d downto 1 do

    begin

    if (s[i]='-')or(s[i]='+') then

    begin

    s11:=0;

    val(copy(s,i+1,d-i),s11);

    if s[i]='-'then c:=c+s11 else c:=c-s11;

    delete(s,i,d-i+1);

    end;

    end;

    if pos('=',s)>1 then

    begin

    val(s,s11);

    c:=c-s11;

    s:='';

    end;

    end;

    if (a=0)and(b=0)then writeln('181818181818') else

    if (a=0)and(b0)then

    begin

    writeln('1');

    x1:=(-1*c)/b;

    if x1=0 then writeln(0) else writeln(x1:0:5);

    end else

    if (a0)then

    begin

    de:=b*b-4*a*c;

    if de>=0 then

    begin

    x1:=(-1*b-sqrt(de))/(2*a);

    x2:=(-1*b+sqrt(de))/(2*a);

    if x1x2 then

    begin

    writeln(2);

    if x1=0 then write(0,' ')else write(x1:0:5,' ');

    if x2=0 then writeln(0) else writeln(x2:0:5);

    end else

    if x1=x2 then

    begin

    writeln(1);

    if x1=0 then writeln(0) else writeln(x1:0:5);

    end;

    end else writeln(0);

    end;

    end.

  • 0
    @ 2009-10-31 21:49:21

    祖坟冒青烟了 AC了!!!!!!

    ---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|

    R1679492 Accepted 100 From andyxxsd-

     P1646 FPC Vijos Sunny 2009-10-31 21:47:14

    R1679426 Unaccepted 0 From andyxxsd-

     P1646 FPC Vijos Easy 2009-10-31 21:38:31

    R1679377 Unaccepted 20 From andyxxsd-

     P1646 FPC Vijos Easy 2009-10-31 21:31:40

    R1679362 Unaccepted 90 From andyxxsd-

     P1646 FPC Vijos Easy 2009-10-31 21:30:17

    R1679345 Unaccepted 90 From andyxxsd-

     P1646 FPC Evolution SmdCn 2009-10-31 21:27:53

    R1679333 Unaccepted 80 From andyxxsd-

     P1646 FPC Vijos Easy 2009-10-31 21:26:59

    R1679259 Unaccepted 80 From andyxxsd-

     P1646 FPC Vijos Sunny 2009-10-31 21:18:59

    R1679215 Unaccepted 60 From andyxxsd-

     P1646 FPC Evolution SmdCn 2009-10-31 21:14:21

    R1679188 Unaccepted 50 From andyxxsd-

     P1646 FPC Evolution SmdCn 2009-10-31 21:11:06

    R1679136 Unaccepted 60 From andyxxsd-

     P1646 FPC Vijos Easy 2009-10-31 21:04:56

    R1679091 Unaccepted 30 From andyxxsd-

     P1646 FPC Victoria Roo 2009-10-31 20:59:50

    R1679057 Unaccepted 20 From andyxxsd-

     P1646 FPC Vijos Sunny 2009-10-31 20:56:17

    R1679024 Unaccepted 10 From andyxxsd-

     P1646 FPC Victoria Roo 2009-10-31 20:51:49

    R1678978 Unaccepted 0 From andyxxsd-

     P1646 FPC Edogawa Conan 2009-10-31 20:45:30

    R1678914 Unaccepted 0 From andyxxsd-

     P1646 FPC Vijos Sunny 2009-10-31 20:37:35

    15次+1个小时=AC T_T

    ---|---|---|---|---|---|---|---|---|---|---|---|---|-

    program p1646;

    var z,f,i,j,sj,kx,k,k3,l:longint;

    sjx,a,b,c,k1,k2:real;

    s:string;

    kao:boolean;

    begin

    readln(s);

    l:=length(s);z:=1;f:=-1;

    if s[pos('=',s)+1]'-' then s:=copy(s,1,pos('=',s))+'+'+copy(s,pos('=',s)+1,l);

    if s[1]'-' then s:='+'+s;

    l:=length(s);i:=l;

    while i>0 do

    begin

    if s[i]='=' then begin z:=-1;f:=1;end;

    if (s[i]='+')or(s[i]='-') then

    begin

    j:=i+1;

    while (j='0')and(s[j]0)and((s[j]>='0')and(s[j]0)and((s[j]>='0')and(s[j]0 then writeln(2);

    if sjx

  • 0
    @ 2009-10-25 11:27:17

    好繁

  • 0
    @ 2009-10-19 13:16:55

    第一次 愣是没看到有种情况18181818

    第二次 没有看到二次一次项系数均为0,常数项不为0的情况

    第三次 没看到二次项系数为1的情况

    前两种情况会导致207错误

    ---|---|---|--就这样,我的通过率又下降了

    Ac的程序输出部分

    delta:=X1*X1-4*X2*Cs;

    if (x2=0)and(x10) then

    begin

    writeln(1);

    writeln(-cs/x1:0:5);

    end else

    if (x2=0)and(x1=0)and(Cs0) then writeln(0) else

    if (x2=0)and(x1=0)and(Cs=0) then writeln(181818181818) else

    if delta

  • 0
    @ 2009-10-06 21:28:55

    字符串处理,以及初一的数学知识~~

    这里不多说,字符串处理要小心,我就是因为这样提交了N次,ac率直线下降..

    注意一些问题:

    如果是p的话,real的0保留5位小数点可能会输出-0.00000,所以在结果是0的时候要注意处理。楼上的几位都是将结果重新赋为0,我是直接write('0.00000')。

    另外,a=0&&b=0时要注意,若c0,无解,若c=0,无限解

    许多人90分就是忘了1=2时无解

    ~~~~(>_

  • 0
    @ 2009-10-02 14:36:36

    化简:

    //等号右面系数为正

    //从后往前扫串

    //置空临时串

    //不含符号读一项

    //若没有系数,补上“1”

    //读当前项符号

    //如果是常数项

    //累计常数项

    //如果是一次项

    //累计一次项

    //否则是二次项

    //累计二次项

    //若等号右边读完

    //系数变为负

    //化简得系数

    //如果是二次方程

    //如果delta

  • 0
    @ 2009-09-27 13:18:56

    字符串处理。。。。。。细节活 O.O

  • 0
    @ 2009-09-24 23:00:09

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    终于ac!

    此题要考虑的细节很多,一不小心就做错

  • 0
    @ 2009-09-20 21:47:21

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    第175人,呜呜。。。

  • 0
    @ 2009-09-18 22:16:07

    交了2次AC

    第一次把sqrt(round(b))打成了

    round(sqrt(b)),

    搞到最后两个数据不够精确!!~~~~

    var

    s:string;

    i,j,k,m,n,num,a,b,c,p,g,new,deta:longint;

    gen1,gen2:real;

    begin

    readln(s);

    s:=s+'+0';

    a:=0; b:=0; c:=0; g:=1;

    p:=1; new:=-1;

    while p0 then

    begin

    if new-1 then

    begin

    new:=new*g;

    c:=c+new;

    new:=-1;

    end;

    if s[p]='+' then g:=1;

    if s[p]='-' then g:=-1;

    inc(p);

    end

    else if pos(s[p],'1234567890')>0 then

    begin

    if new=-1 then new:=0;

    new:=new*10+ord(s[p])-48;

    inc(p);

    end

    else if s[p]='x' then

    begin

    if new=-1 then new:=1;

    inc(p);

    new:=new*g;

    if s[p]='^' then

    begin

    a:=a+new;

    new:=-1;

    p:=p+2;

    end

    else

    begin

    b:=b+new;

    new:=-1;

    end;

    end

    else

    begin

    if new-1 then

    begin

    new:=new*g;

    c:=c+new;

    new:=-1;

    end;

    a:=a*-1;

    b:=b*-1;

    c:=c*-1;

    g:=1;

    inc(p);

    end;

    end;

    a:=a*-1;

    b:=b*-1;

    c:=c*-1;

    if a0 then

    begin

    deta:=b*b-4*a*c;

    if deta>0 then

    begin

    writeln(2);

    gen1:=(-b+sqrt(round(deta))) / (2*a);

    gen2:=(-b-sqrt(round(deta))) / (2*a);

    if gen2

  • 0
    @ 2009-09-16 13:23:02

    交了3次才AC

    做的时候有几个惨痛的经验:

    1。对于系数a,b,c不同情况的分类做的不完善

    2。在等号后面的那一个项没有处理好符号

    3.没有看到两个解要先大后小,而且当root1=0时writeln(root1:0:5)会输出科学记数法。

    贴一部分代码:

    procedure checkroot;

    begin

    delta:=(b*b)-(4*a*c);

    if a0 then //是否一元二次方程

    begin

    if delta>0 then rootnum:=2;//两个解

    if delta=0 then rootnum:=1;//一个解

    if delta

  • 0
    @ 2009-09-12 15:23:50

    纪念我的第一次~~~~

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-09-10 16:04:09

    计算机的改良'的改良

  • 0
    @ 2009-09-07 16:45:10

    细节最重要....

    交了3次

    第一次 没考虑 二次项系数为0

    第二次 没考虑 输出数的大小

    第三次 秒过 .....

  • 0
    @ 2009-09-06 21:49:38

    '计算机的改良'的改良

    争取下一次出个二元一次方程组的题……

  • 0
    @ 2009-09-06 17:59:45

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    无语……交了3次……才AC……第一次忘了加1818181818了,第二次几乎没动……,第三次AC。纯模拟……虽然猥琐但还是顶一个!

信息

ID
1646
难度
8
分类
字符串 | 表达式处理其他 | 数学 点击显示
标签
递交数
2003
已通过
264
通过率
13%
被复制
4
上传者