• 10.21T1 数学


    Description

      小B和小S准备参加学校最火爆的围棋社。作为资格考试,社长给他们出了一道题:给出一个有n条水平线与m条竖直线构成的棋盘(并不一定是传统围棋棋盘的19条线),然后他们有k枚棋子可以摆放到棋盘上的网格的交叉点上。我们定义一个方案的“赢面”为棋盘上四边与棋盘上的直线重合且四个角上都有棋子的矩形个数。小B和小S当然要尽量选出“赢面”最大的方案。不过他们还要学求导,背元素周期表,刷物理必刷题......所以他们向你求助。如果你成功帮助他们,就会得到巴蜀无限饭卡。

    Input

      输入一行仅三个数n,m,k。

    Output

      输出仅一行一个整数表示能得到的最大“赢面”。

    Sample Input

    输入1:3 3 8 输入2:7 14 86

    Sample Output

    输出1:5 输出2:1398

    Hint

    【数据规模】
      对于50%的数据0<N,M≤30; 
      对于100%的数据0<N,M≤30000;K≤N*M。
     
     
     

    简单的数学题,很显然,只有棋子摆在一起的时候答案才会最优,于是便很容易推出计算式子

    枚举第一行的棋子个数,假设除最后一行外,其他都是i个

    注意如果说余数超过m就不可行,可以在更后面被计算到

    code:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int main(){
     5     long long n,m,k;
     6     cin>>n>>m>>k;
     7     long long ans=0;
     8     for(long long i=2;i<=n;i++){
     9         long long l=k/i;
    10         if(l>m)continue;
    11         if(l==0)break;
    12         long long rest=k%i;
    13         if(rest>m)continue;
    14         long long temp=(i-1)*i/2*(l-1)*l/2;
    15         temp+=(rest-1)*rest/2*l;
    16         ans=max(ans,temp);
    17     }
    18     cout<<ans;
    19     return 0;
    20 }

    over

  • 相关阅读:
    熟悉常用的Linux操作
    组合数据类型练习
    简易的词法分析程序
    大数据概述
    201552040205 关于对java的体验与感悟
    对已学习的java内容的一些感悟
    关于java中的一些小技巧
    Javase 大纲2
    Javase大纲
    MysQL知识整理
  • 原文地址:https://www.cnblogs.com/saionjisekai/p/9825953.html
Copyright © 2020-2023  润新知