zoukankan      html  css  js  c++  java
  • HDU 6154 CaoHaha's staff(2017中国大学生程序设计竞赛

    题目代号:HDU 6154

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154

    CaoHaha's staff

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 777    Accepted Submission(s): 438


    Problem Description
    "You shall not pass!"
    After shouted out that,the Force Staff appered in CaoHaha's hand.
    As we all know,the Force Staff is a staff with infinity power.If you can use it skillful,it may help you to do whatever you want.
    But now,his new owner,CaoHaha,is a sorcerers apprentice.He can only use that staff to send things to other place.
    Today,Dreamwyy come to CaoHaha.Requesting him send a toy to his new girl friend.It was so far that Dreamwyy can only resort to CaoHaha.
    The first step to send something is draw a Magic array on a Magic place.The magic place looks like a coordinate system,and each time you can draw a segments either on cell sides or on cell diagonals.In additional,you need 1 minutes to draw a segments.
    If you want to send something ,you need to draw a Magic array which is not smaller than the that.You can make it any deformation,so what really matters is the size of the object.
    CaoHaha want to help dreamwyy but his time is valuable(to learn to be just like you),so he want to draw least segments.However,because of his bad math,he needs your help.
     

    Input
    The first line contains one integer T(T<=300).The number of toys.
    Then T lines each contains one intetger S.The size of the toy(N<=1e9).
     

    Output
    Out put T integer in each line ,the least time CaoHaha can send the toy.
     

    Sample Input
    5
    1
    2
    3
    4
    5
     

    Sample Output
    4
    4
    6
    6
    7
     

    Source
    [2017中国大学生程序设计竞赛 - 网络选拔赛]( http://acm.hdu.edu.cn/search.php?field=problem&key=2017%D6%D0%B9%FA%B4%F3%D1%A7%C9%FA%B3%CC%D0%F2%C9%E8%BC%C6%BE%BA%C8%FC+-+%CD%F8%C2%E7%D1%A1%B0%CE%C8%FC&source=1&searchmode=source)

    题目大意:有一个巫师可以在一个带有xOy坐标系的魔术场地上画传送阵,他画的传送阵面积要大于或等于需要传送物品的面积,他每分钟只能画一条边,这条边能是每个单位方块的边或者对角线(即每次能画单位长度为1的边或者(sqrt2)的对角线)现在他希望用最小的时间画出满足需要的面积的传送阵,他需要你的帮助。
    解题思路:使面积最大化,即尽量使用对角线进行绘制传送阵。

    现在需要讨论的是对于面积的特殊情况,现在根据下图来看一看:


    很显然,在原来的基础上只增加了一条边,但是面积却增加了1.5,也就是说当面积为9的时候,只需要在8条边的基础上增加一条边即可使覆盖面积达到10.5,那么同理,当某条边的长度很长的时候那么在原先的基础上只需要增加一条边,面积却扩大了很多,并且这是最优的画法(只需增加一笔即可扩展出一个梯形)
    并且当有两个连续边各增加一个梯形后,可以将两条小边扩展成直角如下图所示,

    同理,当一个正方形每条边增加一笔即可将整个正方形的边长增加(sqrt2)这是显然的,再看看下图

    这样是最优的画法,相同的边时使面积最大化。
    下面放上AC代码:

    # include <bits/stdc++.h>
    using namespace std;
    # define IOS ios::sync_with_stdio(false);
    typedef unsigned long long ULL;
    typedef long long LL;
    ///coding...................................
    
    int main()
    {
        IOS
    #ifdef FLAG
        freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
    #endif /// FLAG
        LL n,t,a[10]={0,4,4,6,6,7,8,8,8};
        cin>>t;
        while(t--) {
            cin>>n;
            if(n<=8)cout<<a[n]<<endl;
            else {
                LL l=0;
                while(2*l*l<=n)++l;--l;
                if(n==2*l*l)cout<<4*l<<endl;
                else if(n<=2*l*l+l-0.5)cout<<4*l+1<<endl;
                else if(n<=2*l*l+2*(l-0.5)+1)cout<<4*l+2<<endl;
                else if(n<=2*l*l+3*(l-0.5)+2)cout<<4*l+3<<endl;
                else cout<<4*l+4<<endl;
            }
    
        }
        return 0;
    }
    
    
  • 相关阅读:
    kubeadm部署K8S集群v1.16.3
    MySQL5.7Gtid主从复制总是遇到日志被清等出现无法正常主从复制
    ORACLE数据库SQL优化 not in 与not exits
    某控股公司OA系统ORACLE DG搭建
    阿里云ECS服务器上搭建keepalived+mha+mysql5.6+gtid+一主两从+脚本判断架构踩的坑
    生产案例:开发不小心把某个表数据清了,没有逻辑备份,有物理备份
    生产案例:突然产生大量的归档日志,导致磁盘空间满了无法登陆数据库
    maxscale读写分离
    MYSQL EXPLAIN执行计划命令详解(支持更新中)
    vue 解决 post请求下载文件,下载的文件损坏打不开,结果乱码
  • 原文地址:https://www.cnblogs.com/teble/p/7425292.html
Copyright © 2011-2022 走看看