• JZOJ3452. 【NOIP2013中秋节模拟】长方形(rectangle)


    Description

      鸡腿是CZYZ的著名DS,但是不想学数学的DS不是好GFS,所以鸡腿想通过提高数学水平来增强他的GFS气质!虽然你对鸡腿很无语,但是故事的设定是你帮助鸡腿增强了GFS气质,所以现在你必须教鸡腿学数学! 
      鸡腿想到了一个很高(sha)明(bi)的问题,在 N 条水平线与 M 条竖直线构成的网格中,放 K 枚石子,每个石子都只能放在网格的交叉点上。问在最优的摆放方式下,最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子。 
     

    Input

    一行输入三个正整数N,M,K。 
     

    Output

    一行输出一个正整数,表示最多的满足条件的长方形数量。 
     

    Solution

    结论就是:

     
     
    代码
     1 var
     2   ans:int64;
     3   n,m,k:longint;
     4 function min(o,p:int64):int64;
     5 begin
     6   if o<p then exit(o);
     7   exit(p);
     8 end;
     9 
    10 function max(o,p:int64):int64;
    11 begin
    12   if o>p then exit(o);
    13   exit(p);
    14 end;
    15 
    16 function fd(x:longint):int64;
    17 begin
    18   exit((x-1)*x div 2);
    19 end;
    20 
    21 function main(x,y:longint):int64;
    22 var
    23   t:longint;
    24 begin
    25   t:=x;
    26   if y<m then t:=y;
    27   exit(fd(x)*fd(y)+fd(k-x*y)*t);
    28 end;
    29 
    30 procedure main;
    31 var
    32   i,t,r,x:longint;
    33 begin
    34   if n>m then
    35     begin
    36       t:=n; n:=m; m:=t;
    37     end;
    38   r:=min(n,trunc(sqrt(k)));
    39   ans:=0;
    40   for i:=2 to r do
    41     begin
    42       x:=min(m,k div i);
    43       if k>=x*(i+1) then continue;
    44       ans:=max(ans,main(i,x));
    45     end;
    46 end;
    47 
    48 begin
    49   assign(input,'rectangle.in');
    50   assign(output,'rectangle.out');
    51   reset(input);
    52   rewrite(output);
    53   readln(n,m,k);
    54   main;
    55   writeln(ans);
    56   close(input);
    57   close(output);
    58 end.
  • 相关阅读:
    对象数组输出学生信息
    对象数组实现添加和显示客户信息
    控制台输出模拟注册登录幸运抽奖
    对象数组和for循环遍历输出学生的信息
    控制台输出<迷你DVD管理>
    CF524B 题解
    优先队列的重载运算符
    [洛谷日报第19期]Codeforces游玩攻略(转)
    最短路(三种基础算法)
    P2032 扫描
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9497463.html
Copyright © 2020-2023  润新知