• NOIP2012国王游戏


    一交A,TAT

    program game;
    
    Type
     gjd=record
       len:longint;
       d:array[0..2000] of longint;
     end;
     
    Var
     n,i:longint;
     a,b:array[0..10002] of longint;
     now,max,q:gjd;
    
    Procedure fopen;
      begin
      assign(input,'game.in');
      assign(output,'game.out');
      reset(input);
      rewrite(output);
    end;
    
    Procedure fclose;
      begin
      close(input);
      close(output);
    end;
    
    Procedure swap(var p,q:longint);
    var
     y:longint;
      begin
      y:=p;
      p:=q;
      q:=y;
    end;
    
    Procedure qsort(l,r:longint);
    var
     i,j,x:longint;
      begin
      i:=l;j:=r;x:=a[(l+r) div 2]*b[(l+r) div 2];
        repeat
        while a[i]*b[i]<x do inc(i);
        while a[j]*b[j]>x do dec(j);
        if i<=j then
          begin
          swap(a[i],a[j]);
          swap(b[i],b[j]);
          inc(i);
          dec(j);
        end;
      until i>j;
      if l<j then qsort(l,j);
      if i<r then qsort(i,r);
    end;
    
    Procedure print(P:gjd);
    var
     i:longint;
      begin
      for i:=p.len downto 1 do
        begin
        if i<>p.len then
          begin
          if p.d[i]<10 then write(0);
          if p.d[i]<100 then write(0);
          if p.d[i]<1000 then write(0);
        end;
        write(p.d[i]);
      end;
    end;
    
    Function more(p,q:gjd):boolean;
    var
     i:longint;
      begin
      if p.len>q.len then exit(true);
      for i:=p.len downto 1 do
        begin
        if p.d[i]>q.d[i] then exit(true);
        if p.d[i]<q.d[i] then exit(false);
      end;
      exit(false);
    end;
    
    Function cheng(p:gjd;q:longint):gjd;
    var
     i,jw:longint;
      begin
      cheng:=p;
      jw:=0;
      for i:=1 to cheng.len do
        begin
        cheng.d[i]:=cheng.d[i]*q+jw;
        jw:=cheng.d[i] div 10000;
        cheng.d[i]:=cheng.d[i] mod 10000;
      end;
      while jw>0 do
        begin
        inc(cheng.len);
        cheng.d[cheng.len]:=jw;
        jw:=cheng.d[cheng.len] div 10000;
        cheng.d[cheng.len]:=cheng.d[cheng.len] mod 10000;
      end;
      while (cheng.len>1) and (cheng.d[cheng.len]=0) do dec(cheng.len);
    end;
    
    Function divide(P:gjd;q:longint):gjd;
    var
     ans:gjd;
     i,jw:longint;
      begin
      ans:=p;
      jw:=0;
      for i:=ans.len downto 1 do
        begin
        ans.d[i]:=(ans.d[i]+jw*10000) div q;
        jw:=(p.d[i]+jw*10000)-ans.d[i]*q;
      end;
      while (ans.len>1) and (ans.d[ans.len]=0) do dec(ans.len);
      exit(ans);
    end;
    
    
      begin
      fopen;
      readln(n);
      for i:=0 to n do
        readln(a[i],b[i]);
      qsort(1,n);
      now.len:=1;
      now.d[1]:=a[0];
      max.len:=1;
      max.d[1]:=0;
      for i:=1 to n do
        begin
        q:=divide(now,b[i]);
        if more(q,max) then max:=q;
        now:=cheng(now,a[i]);
      end;
      print(max);
      fclose;
    end.
    
  • 相关阅读:
    委托操作控件使用01
    C#读写ini
    List集合的使用小技巧|非常实用首先举例2个集合A,B. List<i
    xiaoqiang
    c#遍历目录及子目录下某类11型的所有的文件
    2015实习生面试记录
    Sliding Window Maximum
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Search Tree Iterator
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/htfy/p/2781576.html
Copyright © 2020-2023  润新知