/ Randle /

记录详情

Time Exceeded

/usr/bin/ld.bfd: warning: /out/link.res contains output sections; did you forget -T?
# 状态 耗时 内存占用
#1 Wrong Answer 4ms 1.211 MiB
#2 Wrong Answer 4ms 1.234 MiB
#3 Wrong Answer 4ms 1.227 MiB
#4 Time Exceeded ≥1002ms ≥1.238 MiB
#5 Time Exceeded ≥1007ms ≥1.23 MiB
#6 Wrong Answer 531ms 1.215 MiB
#7 Time Exceeded ≥1006ms ≥1.203 MiB
#8 Time Exceeded ≥1007ms ≥1.25 MiB
#9 Time Exceeded ≥1003ms ≥1.215 MiB
#10 Time Exceeded ≥1007ms ≥1.215 MiB

代码

uses math;
type
  big=record
        num,typ:longint;
      end;
const
  max1=(trunc(sqrt(2000000000))+1);
var
  prhash:array[1..max1] of longint;
  prs:array[1..max1] of longint;
  prnum,i,j,maxx,minx,k:longint;
  a0,a1,b0,b1,biga0,biga1,bigb0,bigb1,n,ans,x:longint;
  a0num,a1num,b0num,b1num:array[1..max1+4] of longint;
  temp2:array[1..4] of longint;
  temp:array[1..4] of big;
  t:big;
  flag:boolean;
function comp(a,b:longint):longint;
begin
  if a>b then exit(1);
  if a=b then exit(0);
  exit(-1);
end;
procedure getnum(a:longint;var num:array of longint;var bignum:longint);
var i,j,sqt:longint;
begin
  for i:=1 to prnum do
  begin
    while a mod prs[i]=0 do
    begin
      inc(num[i]);
      a:=a div prs[i];
    end;
    if a=1 then break;
    if (a<max1) and (prhash[a]>0) then begin inc(num[prhash[a]]);break;end;
  end;
  if a>prs[prnum] then bignum:=a
                  else bignum:=1;
end;
begin
  filldword(prhash,sizeof(prhash),1);
  prhash[1]:=0;
  for i:=2 to trunc(sqrt(max1)) do
  begin
    if prhash[i]>0
    then begin
           for j:=i to (max1 div i) do
             prhash[j*i]:=0;
         end;
  end;
  prnum:=0;
  for i:=1 to max1 do
    if prhash[i]>0
    then begin
           prnum:=prnum+1;
           prs[prnum]:=i;
           prhash[i]:=prnum;
           //write(i,' ');
         end;
  readln(n);
  for i:=1 to n do
  begin
    readln(a0,a1,b0,b1);
    fillchar(a1num,sizeof(a1num),0);
    fillchar(a0num,sizeof(a0num),0);
    fillchar(b1num,sizeof(b1num),0);
    fillchar(b0num,sizeof(b0num),0);
    getnum(a1,a1num,temp[1].num);
    temp[1].typ:=1;
    getnum(a0,a0num,temp[2].num);
    temp[2].typ:=2;
    getnum(b0,b0num,temp[3].num);
    temp[3].typ:=3;
    getnum(b1,b1num,temp[4].num);
    temp[4].typ:=4;
    for j:=1 to 4 do
      for k:=j+1 to 4 do
      if temp[j].num>temp[k].num
      then begin
             t:=temp[j];
             temp[j]:=temp[k];
             temp[k]:=t;
          end;
    x:=prnum+1;
    for j:=1 to 4 do
    begin
      if (j<>1) and (temp[j].num<>temp[j-1].num) then inc(x);
      case temp[j].typ of
        1:a1num[x]:=1;
        2:a0num[x]:=1;
        3:b0num[x]:=1;
        4:b1num[x]:=1;
      end;
      temp2[x-prnum]:=temp[j].num;
    end;
    flag:=false;
    ans:=1;

    for j:=1 to prnum+4 do
    begin
      if (j>prnum) and (temp2[j-prnum]=1) then continue;
      case comp(a0num[j],a1num[j]) of
        1:begin
            maxx:=a1num[j];
            minx:=a1num[j];
          end;
        0:begin
            maxx:=maxlongint;
            minx:=a1num[j];
          end;
        -1:begin
             //writeln(0);
             flag:=true;
             break;
           end;
      end;
      case comp(b0num[j],b1num[j]) of
        1:begin
            //writeln(0);
            flag:=true;
            break;
          end;
        0:maxx:=min(maxx,b0num[j]);
        -1:begin
             maxx:=min(maxx,b1num[j]);
             minx:=max(minx,b1num[j]);
           end;
      end;
      ans:=ans*(maxx-minx+1);
      //if ans<0 then break;
    end;

    if (ans<0) or flag then begin writeln(0);continue;end;
    writeln(ans);
  end;
end.

信息

递交者
类型
递交
题目
改编小学数学题(第一个AC奖励5元)
题目数据
下载
语言
Pascal
递交时间
2017-10-13 15:03:50
评测时间
2017-10-13 15:03:50
评测机
分数
0
总耗时
≥6580ms
峰值内存
≥1.25 MiB