Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

这题用不着哈希吧!二分+暴力,直接开个100W数组记录,加上qsort。

Posted by lydliyudong at 2011-06-17 17:53:39 on Problem 1840 and last updated at 2011-06-17 17:54:08
var
 f:array[0..1000000,0..1]of longint;
 a,b,c,d,e,i,j,k,n,ans,temp,l,r,mid:longint;

procedure qsort(l,r:longint);
 var
  i,j,x:longint;
  y:array[0..1]of longint;
 begin
  i:=l;j:=r;
  x:=f[(l+r)>>1,0];
  repeat
   while f[i,0]<x do inc(i);
   while x<f[j,0] do dec(j);
   if not(i>j) then
    begin
     y:=f[i]; f[i]:=f[j]; f[j]:=y;
     inc(i); dec(j);
    end;
  until i>j;
  if l<j then qsort(l,j);
  if i<r then qsort(i,r);
 end;

function pow(x:longint):longint; begin exit(x*x*x); end;

begin
 readln(a,b,c,d,e);
 for i:=-50 to 50 do
  for j:=-50 to 50 do
   for k:=-50 to 50 do
    if (i<>0)and(j<>0)and(k<>0) then
     begin
      inc(n);
      f[n,0]:=a*pow(i)+b*pow(j)+c*pow(k);
      f[n,1]:=1;
     end;
 qsort(1,n);
 i:=0;
 while i<n do
  begin
   inc(i);
   k:=1;
   for j:=i+1 to n do
    if f[i,0]=f[j,0] then inc(k) else break;
   for j:=i to i+k-1 do
    f[j,1]:=k;
   inc(i,k-1);
  end;
 for i:=-50 to 50 do
  for j:=-50 to 50 do
   if (i<>0)and(j<>0) then
    begin
     temp:=-pow(i)*d-pow(j)*e;
     l:=1; r:=n;
     while l<r do
      begin
       mid:=(l+r)>>1;
       if f[mid,0]<temp then l:=mid+1 else r:=mid;
      end;
     if f[l,0]=temp then inc(ans,f[l,1]);
    end;
 writeln(ans);
end.

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator